82分求助

P2010 [NOIP2016 普及组] 回文日期

老子是北瓜 @ 2020-09-13 16:55:59

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int month[15]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int a[100];
bool is_rev(int x){
    int tmp=x,i=0;
    for(int i=1; i<=8; ++i){
        a[i]=tmp%10;
        tmp/=10;
    }
    for(int i=1; i<=8; ++i)
        if(a[i]!=a[8-i+1]) return 0;
    return 1;
}
bool is_year(int x){
    if(x%400==0) return 1;
    if(x%4==0 && x%100!=0) return 1;
    return 0;
}
int main(){
    int date1,date2,s=0;
    cin>>date1>>date2;
    int y,m,d;
    y=date1/10000;
    m=date1/100%100;
    d=date1%100;
    while(y*10000+m*100+d!=date2){
        s+=is_rev(y*10000+m*100+d);
        if(d==month[m]+is_year(y))
        {
            if(m==12){
                m=1;
                ++y;
                d=1;
            }
            else{
                ++m;
                d=1;
            }
        }
        else
            ++d;
    }
    s+=is_rev(date2);
    cout<<s;
    return 0;
}

by metaphysis @ 2020-09-14 15:27:23

@老子是北瓜

Hack:

13400430 13400501

您的输出:

1

正确输出:

0

Bug:

if(d==month[m]+is_year(y))

=>

if(d==month[m]+(m == 2 && is_year(y)))

有空请您访问我的 CSDN博客,里面有我写的一本书,内有编程竞赛相关内容的介绍,并附有对应的练习题目(题目源自UVa OJ),可免费下载此书的PDF版本:《C++,挑战编程——程序设计竞赛进阶训练指南》。


|