大佬救命,为什么样例能过其他全wa
查看原帖
大佬救命,为什么样例能过其他全wa
824640
liyuanxin楼主2024/3/2 13:08
#include<iostream>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
int n,a[15],ans[15];
int mtod[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int res;
char s[15][15];
bool isrn(int x){
	if(x%4==0&&x%100!=0||x%400==0)return true;
	return false;
}
bool isprime(int x){
	if(x==1)return false;
	for(int i=2;i*i<x;i++){
		if(x%i==0)return false;
	}
	return true;
}
void dfs(int dep){
	
	int day=ans[8]+ans[7]*10;
	int month=ans[6]+ans[5]*10;
	int year=ans[1]*1000+ans[2]*100+ans[3]*10+ans[4];
	if(isrn(year)&&month==2&&day>29){
		return ;
	}else if(!isrn(year)&&month==2&&day>28){
		return ;
	}
	if(month>12)return;
	if(day>mtod[month])return ;
	
	if(dep>8){
		if(isprime(day+month*100)&&isprime(day)&&isprime(day+month*100+year*10000)){
			res++;
		}
		return ;
	}
	
	if(a[dep]==-1){
		for(int j=0;j<10;j++){
			if(dep==5&&j>1)continue;
			if(ans[5]==1&&dep==6&&(j>2))continue;
			if(dep==7&&j>3)continue;
			ans[dep]=j;
			dfs(dep+1);
			ans[dep]=-2;
		}
	}else{
		ans[dep]=a[dep];
		dfs(dep+1);
	}
}

signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=0;j<8;j++){
			cin>>s[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		bool flag=true;
		for(int j=0;j<8;j++){
			if(s[i][j]=='-'){
				flag=false;
				break;
			}
		}
		
		if(flag){
			cout<<"0"<<'\n';
		}else{
			for(int j=0;j<8;j++){
				if(s[i][j]!='-')a[j+1]=(s[i][j]-'0');
				else a[j+1]=-1;
			}
			dfs(1);
			
			cout<<res<<'\n';
		}
		res=0;
		memset(ans,0,sizeof ans);
		memset(a,0,sizeof ans);
	}
	return 0;
}
2024/3/2 13:08
加载中...