蒟蒻看不懂位运算求助,球球了qwq
查看原帖
蒟蒻看不懂位运算求助,球球了qwq
321647
阿炜楼主2022/11/24 19:44
#include <bits/stdc++.h>
using namespace std;
const int p[14]={0,31,29,31,30,31,30,31,31,30,31,30,31,31};
bool f[2020][13][32];
bool vis[2020][13][32];
inline bool check(int y,int m,int d){
	if(d>p[m]) d=1,++m;
	if(m>12) m=1,++y;
	if(y>2016) return false;
	if(y==2016&&m>11) return false;
	if(y==2016&&m==11&&d>4) return false;
	if((y%4!=0||y==1900)&&m==2&&d>28) return false;
	return true;
}
inline bool dfs(int y,int m,int d){
	if(d>p[m]){
		d=1;++m;
	}
	if(m>12){
		m=1,++y;
	}
	if(y==2016&&m==11&&d==4) return false;
	if(vis[y][m][d]) return f[y][m][d];
	vis[y][m][d] = true;
	if(d<=p[m+1]) if(check(y,m+1,d))f[y][m][d] |= dfs(y,m+1,d)^1;
	if(check(y,m,d+1)) f[y][m][d] |= dfs(y,m,d+1)^1;
	return f[y][m][d];
}
int main(){
	dfs(1900,1,1);
	int n;
	cin>>n;
	while(n--){
		int y,m,d;
		cin>>y>>m>>d;
		printf("%s\n",f[y][m][d]?"YES":"NO");
	}
	return 0;
}

中的

if(y==2016&&m==11&&d==4) return false;
	if(vis[y][m][d]) return f[y][m][d];
	vis[y][m][d] = true;
	if(d<=p[m+1]) if(check(y,m+1,d))f[y][m][d] |= dfs(y,m+1,d)^1;
	if(check(y,m,d+1)) f[y][m][d] |= dfs(y,m,d+1)^1;
	return f[y][m][d];

这一段的位运算,看不太懂

2022/11/24 19:44
加载中...