10分求条
查看原帖
10分求条
945742
hexuchen楼主2025/2/6 09:14

rt,悬赏关注

#include <bits/stdc++.h>
using namespace std;
int t,ans=0;
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
string s;
bool is_prime(int x){
	if(x<=1){
		return false;
	}
	for(int i=2;i*i<=x;i++){
		if(x%i==0){
			return false;
		}
	}
	return true;
}
bool check(string a){
	int day=(a[6]-'0')*10+(a[7]-'0');
	int month=(a[4]-'0')*1000+(a[5]-'0')*100+day;
	int year=(a[0]-'0')*1e7+(a[1]-'0')*1e6+(a[2]-'0')*1e5+(a[3]-'0')*1e4+month;
	if(is_prime(day) && is_prime(month) && is_prime(year)){
		int rday=day,rmonth=(a[4]-'0')*10+(a[5]-'0'),ryear=(a[0]-'0')*1000+(a[1]-'0')*100+(a[2]-'0')*10+(a[3]-'0');
		//cout<<rday<<' '<<rmonth<<' '<<ryear<<endl;
		if(ryear>=1 && ryear<=9999){
			if(rmonth>=1 && rmonth<=12){
				if(ryear%4==0 && ryear%100!=0 || ryear%400==0){
					days[2]=29;
				}
				if(rday>=2 && rday<=days[rmonth]){
					return true;
				}
			}
		}
	}
	return false;
}
void dfs(int step){
	if(step>7){
		if(check(s)){
			//cout<<s<<endl;
			ans++;
		}
		return ;
	}
	if(s[step]!='-'){
		dfs(step+1);
	}
	else{
		for(int i=0;i<=9;i++){
			s[step]=('0'+i);
			dfs(step+1);
			s[step]='-';
		}
	}
}
int main(){ 
	cin>>t;
	while(t--){
		ans=0;
		cin>>s;
		dfs(0);
		cout<<ans<<'\n';
	}
	return 0;
}
2025/2/6 09:14
加载中...