一直RE是为什么呢?感觉数组开的挺大的啊
查看原帖
一直RE是为什么呢?感觉数组开的挺大的啊
1172013
we_R楼主2023/12/20 15:49

在自己机子上面跑也没有什么问题啊?

#include<cstdio> 
int day[20]={0,31,28,31,30,31,30,31,31,30,31,30,31,37};
int p[20]={0,3,5,7,11,13,17,19,23,29,31};
int chec[66666],pd=0;
int is_prime(int x) {
	for(int i=2;i*i<=x;i++)
		if(x%i==0)
			return 0;
	return 1;
}
int ru(int x) {
	if( (x%4==0&&x%100!=0)||x%400==0)
		return 1;
	return 0;
}
int main() {
	int t;
	scanf("%d",&t);
	int tmp_day[2000];
	int ttday=0;
	int i,j;
	for(i=1;i<=12;i++) {
		for(j=1;p[j]<=day[i];j++) {
			if( is_prime( i*100+p[j] ) )
				tmp_day[++ttday]=i*100+p[j];
		}
	}
	for(i=1;i<=9999;i++) {
		if(ru(i)) {
			if( is_prime(i*10000+229) )
				chec[++pd]=i*10000+229;
		}
		for(j=1;j<=ttday;j++)
			if( is_prime( i*10000+tmp_day[j] ) )
				chec[++pd]=i*10000+tmp_day[j];
	}
//	printf("QwQ\n");
	char s[20];
	while(t--) {
		scanf("%s",s+1);
		int ans=0;
		for(i=1;i<=pd;i++) {
			int flag=1;
			int now=chec[i];
			for(j=8;j>=1;j--) {
				if(s[j]=='-')
					continue;
				if(s[j]-'0'!=now%10 ) {
					flag=0;
					break;
				}
				now/=10;
			}
			ans+=flag;
		}
		printf("%d\n",ans);
	}
	return 0;
}
2023/12/20 15:49
加载中...