标签:
描述
没什么题出了,怎么办呀~
好吧,百度一道去。
于是此题横空出世,只为开心。
小明喜欢下棋,一日他闲来无聊,将黑白棋子排成一长条观察,发现黑色混在一起好难看啊。
随即想到,黑与黑子不相邻,摆放成一长条,有多少种可能乎?!
输入
多组测试数据,(大概1w组吧)
第一行,棋子的总数 n (0<n<=1000000)
输出
只有一行,保证黑子与黑子不相邻,棋子摆放的所有情况数目取模1000000007后的结果。
样例输入
1
100
样例输出
2
470199269
分析:设a[i]为i个棋子的总种数,b[i]为以白棋结尾的总种数,c[i]为以黑棋为结尾的总种数。则有a[i]=b[i]+c[i],b[i]=a[i-1],c[i]=b[i-1];
#include <cstdio> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> #include <queue> #include <cstdlib> #include <stack> #include <vector> #include <set> #include <map> #define LL long long #define mod 1000000007 #define inf 0x3f3f3f3f #define N 1000010 using namespace std; int a[N],b[N],c[N]; void init() { a[1]=2;b[1]=1;c[1]=1; for(int i=2;i<=1000000;i++) { b[i]=a[i-1];c[i]=b[i-1]; a[i]=b[i]+c[i]; a[i]%=mod; } } int main() { int n; init(); while(scanf("%d",&n)>0) { printf("%d",a[n]); } }
标签:
原文地址:http://www.cnblogs.com/lienus/p/4192260.html