TLE全TLE
查看原帖
TLE全TLE
1392551
ruo_aqueous楼主2024/11/5 20:49
#include <bits/stdc++.h>
using namespace std;
bool k[100000010];
long long t,x,maxx,num1,sum;
string a[15],cs[15];
short r[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool zs(long long jn){
	for (int i = 2;i <= sqrt(jn)+1;i ++){
		if (jn%i == 0)	return 0;
	}
	return 1;
}
void dfs(long long num,int d){
	if (num>a[d].size()){
		long long num2=0,num3=0,num4=0,num5=0,num6=0;
		for (int i = 0;i < cs[d].size();i ++){
			num2 *= 10;
			num2 += cs[d][i]-'0';
			if (i >= cs[d].size()-4){
				num3 *= 10;
				num3 += cs[d][i]-'0';
				if (i >= cs[d].size()-2){
					num6 *= 10;
					num6 += cs[d][i]-'0';
				}
				else{
					num5 *= 10;
					num5 += cs[d][i]-'0';
				}
			}
			else{
				num4 *= 10;
				num4 += cs[d][i]-'0';
			}
		}
		bool flag1=0;
		if (num4%4 != 0)	flag1=1;
		if (num4%100 == 0){
			flag1=0;
			if (num4%400 == 0)	flag1=1;
		}
		if (num5>12)		return ;
		if (num5 <= 0)		return ;
		if (num6 <= 0)		return ;
		if (!flag1){
			if (r[num5]<num6)	return ;
		}
		else{
			if (num5 == 2){
				if (num6>29)	return ; 
			}
			else{
				if (r[num5]<num6)	return ;
			}
		}
		sum += int ((!k[num2])&&(!k[num3]));
		return ;
	}
	if (a[d][num-1] != '-'){
		dfs(num+1,d);
		return ;
	}
	if (num == 1){
		for (int i = 1;i <= 9;i ++){
			cs[d][num-1]=i+'0';
			dfs(num+1,d);
		}
		return ;
	}
	for (int i = 0;i <= 9;i ++){
		cs[d][num-1]=i+'0';
		dfs(num+1,d);
	}
	return ;
}
int main(){
	cin >>t;
	for (int i = 1;i <= t;i ++){
		cin >>a[i];
		cs[i]=a[i];
		x=0;
		for (int j = 0;j < a[i].size();j ++){
			if (a[i][j] == '-'){
				x *= 10;
				x += 9;
				continue;
			} 
			x *= 10;
			x += a[i][j]-'0';
		}
		maxx=max(maxx,x);
	}
	num1=sqrt(maxx)+1;
	for (long long i = 2;i <= maxx;i ++){
		if (!k[i])
			if (i>num1)	continue;
			for (long long j = i*i;j <= maxx;j += i)
				k[j]=1;
	}
	// 质数筛
	for (int i = 1;i <= t;i ++){
		sum=0;
		dfs(1,i);
		cout <<sum <<endl;
	} 
	return 0;
}
2024/11/5 20:49
加载中...