76分求助,#3,#4都wa
查看原帖
76分求助,#3,#4都wa
715186
Youth_foever楼主2023/1/12 18:45
#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判重,找了一个小时,实在找不出问题在哪了

2023/1/12 18:45
加载中...