广州网站建设公司嘉御,中国黄页,最新仿5173游戏装备交易网站 /游戏币交易平台源码整合支付接口,微信加人推码35一单传送门https://www.luogu.com.cn/problem/P5440
相信奇迹的人#xff0c;本身就和奇迹一样了不起。——笛亚 《星游记》 思路历程#xff1a;很离谱的一题#xff0c;在理论上并不困难#xff0c;只要简单dfs欧拉筛就能过。在一开始#xff0c;我采用了倒着模拟的思路本身就和奇迹一样了不起。——笛亚 《星游记》 思路历程很离谱的一题在理论上并不困难只要简单dfs欧拉筛就能过。在一开始我采用了倒着模拟的思路用stoi函数强转字符串发现样例能跑但是仍旧RE现在仍未理解这样的原因于是我选择了另一种做法反过来遍历。
下面是代码
#includeiostream
#includealgorithm
#includecmath
#includeset
#includestring
using namespace std;
const int N1e85;
int _;
string s;
int ans;
bool nums[N];//这两行
long long f[10000001],cot0;//这两行是欧拉筛的板子
int months[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};//减少代码量开一个月份数组
bool check(int num){//检查年份符不符合逻辑int daynum%100;int month(num/100)%100;int yearnum/10000;if((year%40year%100!0)||year%4000){months[2]29;}else months[2]28; return year1year9999month1month12day1daymonths[month];
}void dfs(int x,int num){//第x层,数字为numint sum;//记录每一层要加多少if(x8check(num)!nums[num]!nums[num%10000]!nums[num%100]){//100和10000ans;//2 4 8都要是素数}else if(x8) return;//只要是8就返回else if(s[x]!-){sum(s[x]-0)*pow(10,7-x);//字符串转数字 要注意减去‘0’dfs(x1,numsum);}else{if(x4){//特判优化减少for的遍历月份for(int i0;i2;i){sumi*pow(10,7-x);dfs(x1,sumnum);}}else if(x6){//特判优化日子for(int i0;i4;i){sumi*pow(10,7-x);dfs(x1,sumnum);}}else{for(int i0;i9;i){sumi*pow(10,7-x);dfs(x1,sumnum);}}}}void solve(){ans0;cins;dfs(0,0);从第0层开始coutansendl;
}int main(){nums[1]true;//1不是素数 true就不是素数 long long n1e8;for(long long i2;in;i){if(!nums[i])f[cot]i;for(long long j0;jcoti*f[j]n;j){nums[f[j]*i]true;if(i%f[j]0)break;}}//从开头到这里就是一个欧拉筛的板子cin_;while(_--){solve(); }return 0;
}