捞
查看原帖
捞
663195
Z_AuTwT楼主2024/1/28 13:02

捞

#include<bits/stdc++.h>
using namespace std;
pair<bool,bool> book[2007][13][32][2];
bool rn(int year){
	if(year%4==0&&year%100!=0||year%400==0) return true;
	else return false;
}
bool yf(int yue){
	return yue<=12;
}
bool riq(int year,int yue,int ri){
	if(yue==2){
		if(rn(year)) return ri<=29;
		else return ri<=28;
	}else{
		if(year==1||year==3||year==5||year==7||year==8||year==10||year==12) return ri<=31;
		else return ri<=30;
	}
}
bool cc(int year,int yue,int ri){
	if(year>2006) return false;
	if(year==2006&&yue>11) return false;
	if(year==2006&&yue==1&&ri<4) return false;
	return true;
}
bool pd(int year,int yue,int ri){
	if(year>2006) return false;
	if(yue>12||ri>31) return false;
	if(yue==2){
		if(rn(year)) return ri<=29;
		else return ri<=28;
	}else{
		if(year==1||year==3||year==5||year==7||year==8||year==10||year==12) return ri<=31;
		else return ri<=30;
	}
}
int dfs(int year,int yue,int ri,int ds){
//	cout<<year<<"."<<yue<<"."<<ri<<"\n";
	if(!pd(year,yue,ri)||cc(year,yue,ri)) return 2;
	if(book[year][yue][ri][ds].first) return book[year][yue][ri][ds].second;
	if(ds==1){
		if(year==2006&&yue==11&&ri==4){book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=false;}
		int dt1=year,dt2=yue,dt3=ri;
		dt3++;
		if(!riq(dt1,dt2,dt3)){
			dt3=1;
			dt2++;
			if(!yf(dt2)){
				dt2=1;
				dt1++;
			}
		}
		int v=dfs(dt1,dt2,dt3,0);
		if(v==1){book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=true;}
		dt1=year;
		dt2=yue;
		dt3=ri;
		dt2++;
		if(!yf(dt2)){
			dt2=1;
			dt1++;
		}
		v=dfs(dt1,dt2,dt3,0);
		if(v==1){book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=true;}
		else{book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=false;}
	}else{
		if(year==2006&&yue==11&&ri==4){book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=true;}
		int dt1=year,dt2=yue,dt3=ri;
		dt3++;
		if(!riq(dt1,dt2,dt3)){
			dt3=1;
			dt2++;
			if(!yf(dt2)){
				dt2=1;
				dt1++;
			}
		}
		int v=dfs(dt1,dt2,dt3,0);
		if(v==0){book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=false;}
		dt1=year;
		dt2=yue;
		dt3=ri;
		dt2++;
		if(!yf(dt2)){
			dt2=1;
			dt1++;
		}
		v=dfs(dt1,dt2,dt3,1);
		if(v==1){book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=false;}
		else{book[year][yue][ri][ds].first=true;return book[year][yue][ri][ds].second=false;}
	}
}
int main(){
	int t;
	cin>>t;
	while(t--){
		int a,b,c;
		cin>>a>>b>>c;
		memset(book,false,sizeof(book));
//		cout<<book[0][0][0][0].first<<" "<<book[0][0][0][0].second<<"\n";
		cout<<(dfs(a,b,c,1)==1?"YES\n":"NO\n");
	}
}

这是另外一份代码

2024/1/28 13:02
加载中...