7#WA但下载数据本地测试能过,求调

P2010 [NOIP2016 普及组] 回文日期

LaFanCYC @ 2024-12-18 18:32:56

不知道是不是超时,但超时不应该爆TLE吗

#include<bits/stdc++.h>
using namespace std;
int date1,date2,sum;
bool isy(int y){
    if(y%4==0&&y%100!=0) return true;
    if(y%400==0) return true;
    return false;
}
int ism(int m,int y){
    if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)  return 31;
    if(m==4||m==6||m==9||m==11) return 30;
    if(m==2&&isy(y)==true) return 29;
    if(m==2&&isy(y)==false) return 28;
}
int datego(int x){
    int y=x/10000,m=x%10000/100,d=x%100;
    if(ism(m,y)>=d) d++;
    else {
        m++;
        d=1;
    }
    if(y==12) m=1,y++;
    return y*10000+m*100+d;
}
bool ishw(int x){
    int n=0,m=0;
    n=x;
    while(n!=0){
        m*=10;
        m+=n%10;
        n/=10;
    }
    if(x==m) return true;
    else return false;
}
int main(){
    cin>>date1>>date2;
    int i=date1;
    while(i<=date2){
        if(ishw(i)==true) sum++/*,cout<<i<<endl*/;
        i=datego(i);
    }
    cout<<sum<<endl;
    return 0;
}

by umirin @ 2024-12-18 19:01:10

真的好奇怪,这个代码不仅厌氧而且每月的天数也不对。开O2错4点,关O2错2点,把每个月的天数判定改对更是错3点,神人代码


by lifeam @ 2024-12-18 19:24:01

y==12改成m==13
第二个错误还在找(大悲)


by lifeam @ 2024-12-18 19:25:30

找到了
ism(m,y)>=d改成ism(m,y)>d


by lifeam @ 2024-12-18 19:26:19

@LaFanCYC
应该能过


by lifeam @ 2024-12-18 19:27:51

@umirin
应该是因为数据原因
(毕竟很少有回文数在月底,所以错的少)


by umirin @ 2024-12-18 19:34:01

@lifeam看起来我们改到最后能AC的思路是一样的,只不过我的似乎更麻烦一点。我是把那个m==12的判定丢到月底判定里面顺便重置了个天数。不过反正最后都的确是通过了。如果yc知道你也为了改他的代码试错很多遍的话他应该会很感动吧233\ 总之感谢贡献


by lifeam @ 2024-12-18 19:36:52

@umirin 顺手的事
话说你是他朋友·-·?


by umirin @ 2024-12-18 19:38:45

@lifeam是这样()


|