社区讨论
T8TLE求调
P5440【XR-2】奇迹参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m34m5e30
- 此快照首次捕获于
- 2024/11/05 23:37 去年
- 此快照最后确认于
- 2025/11/04 15:15 4 个月前
CPP
#include<bits/stdc++.h>
//#pragma GCC optimize(3,"Ofast","inline")
#define int long long
using namespace std;
int sum;
string s;
int year[15],month[15],day[15];
vector<int> year1,month1,day1;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool ok(int x)
{
if(x%100!=0&&x%4==0||x%400==0)
{
return 1;
}
return 0;
}
bool check1(int x)
{
if(x<2)
{
return 1;
}
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
{
return 1;
}
}
return 0;
}
bool check()
{
int y=year[1]*1000+year[2]*100+year[3]*10+year[4];
int m=month[1]*10+month[2];
int d=day[1]*10+day[2];
if(y<1)
{
return 0;
}
if(d<1||d>31)
{
return 0;
}
if(m<1||m>12)
{
return 0;
}
if(m!=2)
{
if(d>a[m])
{
return 0;
}
}
else
{
if(ok(y))
{
if(d>29)
{
return 0;
}
}
else
{
if(d>28)
{
return 0;
}
}
}
if(check1(d)||check1(m*100+d)||check1(y*10000+m*100+d))
{
return 0;
}
return 1;
}
void dfs3(int step)
{
if(step==day1.size())
{
if(check())
{
sum++;
}
return;
}
if(day1[step]==1)
{
for(int i=0;i<=3;i++)
{
day[day1[step]]=i;
dfs3(step+1);
day[day1[step]]=-1;
}
}
else
{
for(int i=0;i<=9;i++)
{
day[day1[step]]=i;
dfs3(step+1);
day[day1[step]]=-1;
}
}
}
void dfs2(int step)
{
if(step==month1.size())
{
dfs3(0);
return;
}
if(month1[step]==2)
{
for(int i=0;i<=9;i++)
{
month[month1[step]]=i;
dfs2(step+1);
month[month1[step]]=-1;
}
}
else
{
for(int i=0;i<=1;i++)
{
month[month1[step]]=i;
dfs2(step+1);
month[month1[step]]=-1;
}
}
}
void dfs1(int step)
{
if(step==year1.size())
{
dfs2(0);
return;
}
for(int i=0;i<=9;i++)
{
year[year1[step]]=i;
dfs1(step+1);
year[year1[step]]=-1;
}
}
signed main()
{
// freopen("prime.in","r",stdin);
// freopen("prime.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
int T;
cin>>T;
while(T--)
{
sum=0;
year1.clear();
month1.clear();
day1.clear();
memset(year,0,sizeof(year));
memset(month,0,sizeof(month));
memset(day,0,sizeof(day));
cin>>s;
if(s=="--------")
{
cout<<"55157\n";
continue;
}
for(int i=0;i<4;i++)
{
if(s[i]=='-')
{
year[i+1]=-1;
year1.push_back(i+1);
}
else
{
year[i+1]=s[i]-'0';
}
}
for(int i=4;i<6;i++)
{
if(s[i]=='-')
{
month[i+1-4]=-1;
month1.push_back(i+1-4);
}
else
{
month[i+1-4]=s[i]-'0';
}
}
for(int i=6;i<8;i++)
{
if(s[i]=='-')
{
day[i+1-6]=-1;
day1.push_back(i+1-6);
}
else
{
day[i+1-6]=s[i]-'0';
}
}
dfs1(0);
cout<<sum<<"\n";
}
return 0;
}
/*
*/
回复
共 0 条回复,欢迎继续交流。
正在加载回复...