80分超时!!!!!!

P2010 [NOIP2016 普及组] 回文日期

TCFXY(98k) @ 2017-09-24 00:10:14

#include<stdio.h>
#include<iostream>
using namespace std;
int huiwen(int n)
{
    if(n%10==n/10000000&&n%100/10==(n/1000000)%10&&n%1000/100==(n/100000)%10&&n%10000/1000==n/10000%10)
    return true;
    return false;
}
int judge(int n)
{int m=n/10000;
int k=n%10000/100;
int j=n%100;
if(huiwen(n)){
    if((m%4==0&&m%100!=0)||(m%100==0&&m%400==0))
    {
            if((k==2&&j<=29)||(k==1&&j<=31)||(k==3&&j<=31)||(k==5&&j<=31)||(k==7&&j<=31)||(k==8&&j<=31)||(k==10&&j<=31)||(k==12&&j<=31)||(k==4&&j<=30)||(k==6&&j<=30)||(k==91&&j<=30)||(k==11&&j<=30)){
            return true;
            }
        }
        else {
            if((k==2&&j<=28)||(k==1&&j<=31)||(k==3&&j<=31)||(k==5&&j<=31)||(k==7&&j<=31)||(k==8&&j<=31)||(k==10&&j<=31)||(k==12&&j<=31)||(k==4&&j<=30)||(k==6&&j<=30)||(k==91&&j<=30)||(k==11&&j<=30)){
            return true;
            }
    }
}
return false;
}
int main(){
    int n,m,ans=0;
    scanf("%d%d",&n,&m);
/*    if(n==m){
    if(huiwen(n)) 
    ans=1;
}*/
    for(int i=n;i<=m;i++)
    {if(judge(i))
    ans++;
    }
    printf("%d",ans);
}

为何不通过?? 80分 2,10两点超时

在vijos上通过。。。


by ljc1301 @ 2017-09-24 06:13:29

不能全部枚举,应该枚举年份或月和日,然后根据回文的条件构造出完整的日期,最后判断日期符不符合条件。


by Refun @ 2017-09-24 10:00:28

生蚝太神了STO


|