#include<iostream>
#include<unordered_map>
using namespace std;
int ym[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int nm[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool run(int x)
{
if(x%4==0&&x%100!=0||x%400==0)
return true;
return false;
}
int main()
{
unordered_map<int,bool> has;
int a[10];char c;
scanf("%d%c%d%c%d",&a[1],&c,&a[2],&c,&a[3]);
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
for(int k=1;k<=3;k++)
{
if(i!=j&&j!=k&&k!=i)
{
if(a[i]>=60)//19xx年
{
if(a[j]>=1&&a[j]<=12)//对月判断
{
if(run(a[i]))//是闰年
{
if(a[k]>=1&&a[k]<=ym[a[j]])
if(a[1]==a[i]&&a[2]==a[j]&&a[3]==a[k]||a[1]==a[j]&&a[2]==a[k]&&a[3]==a[i]||a[1]==a[k]&&a[2]==a[j]&&a[3]==a[i])
{
int x=(1900+a[i])*10000+a[j]*100+a[k];
if(has.find(x)==has.end())
{
printf("19%02d-%02d-%02d\n",a[i],a[j],a[k]);
has.insert({x,true});
}
}
}
else
{
if(a[k]>=1&&a[k]<=nm[a[j]])
if(a[1]==a[i]&&a[2]==a[j]&&a[3]==a[k]||a[1]==a[j]&&a[2]==a[k]&&a[3]==a[i]||a[1]==a[k]&&a[2]==a[j]&&a[3]==a[i])
{
int x=(1900+a[i])*10000+a[j]*100+a[k];
if(has.find(x)==has.end())
{
printf("19%02d-%02d-%02d\n",a[i],a[j],a[k]);
has.insert({x,true});
}
}
}
}
}
if(a[i]<=59)//20xx年
{
if(a[j]>=1&&a[j]<=12)
{
if(run(a[i]))
{
if(a[k]>=1&&a[k]<=ym[a[j]])
if(a[1]==a[i]&&a[2]==a[j]&&a[3]==a[k]||a[1]==a[j]&&a[2]==a[k]&&a[3]==a[i]||a[1]==a[k]&&a[2]==a[j]&&a[3]==a[i])
{
int x=(2000+a[i])*10000+a[j]*100+a[k];
if(has.find(x)==has.end())
{
printf("20%02d-%02d-%02d\n",a[i],a[j],a[k]);
has.insert({x,true});
}
}
}
else
{
if(a[k]>=1&&a[k]<=nm[a[j]])
if(a[1]==a[i]&&a[2]==a[j]&&a[3]==a[k]||a[1]==a[j]&&a[2]==a[k]&&a[3]==a[i]||a[1]==a[k]&&a[2]==a[j]&&a[3]==a[i])
{
int x=(2000+a[i])*10000+a[j]*100+a[k];
if(has.find(x)==has.end())
{
printf("20%02d-%02d-%02d\n",a[i],a[j],a[k]);
has.insert({x,true});
}
}
}
}
}
}
}
}
}
return 0;
}
我的想法是先全排列,然后筛选出所有合理的日期,再从合理的日期中选取答案所要求的日期(就是那个长if判断),判重是用unordered_map hash判重,找了一个小时,实在找不出问题在哪了