#11没过怎么办?

P2010 [NOIP2016 普及组] 回文日期

wanghan20100129 @ 2022-10-09 21:31:14

代码如下

#include<bits/stdc++.h>
using namespace std;
int main(){
    int p,q,sum=0;
    cin>>p>>q;
    if(p==q){
        int tmp=0;
        tmp+=q/10000000;
        tmp+=q/1000000%10*10;
        tmp+=q/100000%10*100;
        tmp+=q/10000%10*1000;
        tmp+=q/1000%10*10000;
        tmp+=q/100%10*100000;
        tmp+=q/10%10*1000000;
        tmp+=q%10*10000000;
        if(tmp==p)sum=1;
    }else for(int i=p/10000;i<=q/10000+1;i++){
        int a=i*10000;
        a+=i%10*1000;
        a+=i/10%10*100;
        a+=i/100%10*10;
        a+=i/1000%10;
        int month=a%10000/100,day=a%100;
        if(month<=12&&month!=0&&day!=0){
            if(month==2){
                if(day<=29)sum++;
            }else if(day>30){
                if(day==31)
                    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
                        if(a>=p&&a<=q)sum++;
            }else sum++;
        }
    }
    cout<<sum<<endl;
    return 0;
} 

大佬们帮一下吧


by __Cow__ @ 2022-10-18 22:07:25

@wanghan20100129 反正我没看出来怎么改,但最后一个数据点考察的是当起始与终止年份相等时,如果这一年的回文日期超过了终止日期,或者其小于起始日期,那么应当停止计数,如:

输入:
20110101
20110202
2011年的回文为
20111102
,20111102>20110202所以应当结束计数
out:0
you out:1

by wanghan20100129 @ 2022-12-22 19:25:47

@yrndling 谢谢很久没上洛谷了


|