G涂色牛客小白月赛
链接:https://ac.nowcoder.com/acm/contest/8564/G
来源:牛客网
涂***r>时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld
题目描述
scimoon 做完模拟赛的签到题之后就开始挂机了
他手上有一个纸条,纸条被分割成 n 个格子,scimoon 热衷于填色游戏,想要将纸条填成黑白的
我们形式化地认为,黑色格子为 1 ,白色格子为 0
scimoon 十分讨厌在黑色的格子后面填上白色,即不能出现 "10" 这样的结构
scimoon 能填出多少种不同的纸条呢?
两张纸条不同,当且仅当至少存在一个位置,两张纸条填的颜色不同
由于答案可能非常大,请对 998244353 取模
输入描述:
一行一个整数 n
输出描述:
一行一个整数,表示方案数
示例1
输入
复制
1
输出
复制
2
备注:
题意:给出你串长度让你对进行排布,只有一个条件就是不能出现10这样的结构
思路:通过条件我们可以从10这个地方直接入手,因为他不能出现10所以交界处0在前1在后,后者全是1,全是0,存在1且存在0是有n-1种,所以总的是n+1种,mod取不取应该都行,数据量就1e5
例如n=5
00000 00001 00011 00111 01111 11111
就像这样排布。
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math") #pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native") #include <immintrin.h> #pragma GCC optimize(2) #include <map> #include <queue> #include <string> #include<iostream> #include<stdio.h> #include<string.h> #include <algorithm> #include <math.h> typedef long long ll; typedef unsigned long long ull; using namespace std; typedef pair<ll,ll> pii; #define mem(a,x) memset(a,x,sizeof(a)) #define debug(x) cout << #x << ": " << x << endl; #define rep(i,n) for(int i=0;i<(n);++i) #define repi(i,a,b) for(int i=int(a);i<=(b);++i) #define repr(i,b,a) for(int i=int(b);i>=(a);--i) const int maxn=2e5+1010; #define inf 0x3f3f3f3f #define sf scanf #define pf printf const int mod=998244353; const int MOD=10007; inline int read() { int x=0; bool t=false; char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')t=true,ch=getchar(); while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar(); return t?-x:x; } vector<ll> m1; vector<ll> m2; priority_queue<ll , vector<ll> , greater<ll> > mn;//上 小根堆 小到大 priority_queue<ll , vector<ll> , less<ll> > mx;//下 大根堆 大到小 map<ll,ll>mp; ll n; #define read read() int main(){ ll n; cin>>n; cout<<(n+1)%mod<<endl; return 0; }