每日一题 — 2020 - 04 - 29

题目链接

思维题,主要是找规律,最近不知道怎么回事,感觉做题不耐烦,总是不愿意去想

思路推理:

  • 拿到这个题,看到0变成01, 1变成10,一开始知道是有一些规律,但是没找出来

  • 一开始还想着有什么算法?还是练的太少了

  • 这个题正常的思路是上下连接推理:(看师哥写的)
    每日一题 — 2020 - 04 - 29_第1张图片

  • 所以,直接按照这个写就OK了

  • 代码很简单,就是想没想到(很喜欢这样的题,但是感觉这个题自己应该能做出来)

代码:

#include 
#include 

using namespace std;

const int N = 100010;
const int mod = 998244353;

int f[N][10];

int main(){
	int n;
	scanf("%d",&n);
	f[1][1] = 1;
	for (int i = 2; i <= n; i++){
		f[i][0] = (f[i - 1][0] + f[i - 1][3])%mod;
		f[i][1] = (f[i - 1][1] + f[i - 1][2])%mod;
		f[i][2] = (f[i - 1][2] + f[i - 1][1])%mod;
		f[i][3] = (f[i - 1][3] + f[i - 1][0])%mod;
		if (i % 2 == 0){
			f[i][3] ++;
		}
		else{
			f[i][1] ++;
		}
	}
	for (int i = 0; i < 4; i++){
		printf("%d ",f[n][i]);
	}
	puts("");
	return 0;
}

你可能感兴趣的:(每日一题,思维)