大佬们,为啥70分?(有注释)

P2010 [NOIP2016 普及组] 回文日期

GoldenFishX @ 2019-11-05 18:18:41

\color{#AEF}\colorbox{#FAA}{\text{~~~~~最后3个点WA~~~~~}}

#include<bits/stdc++.h>
using namespace std;

int hw(int n,int y,int r)//年月日 
{
    int a[8];
    a[0]=n/1000,n=n%1000;
    a[1]=n/100,n=n%100;
    a[2]=n/10,n=n%10;
    a[3]=n;
    a[4]=y/10;
    a[5]=y%10;
    a[6]=r/10;
    a[7]=r%10;
    for(int i=0;i<4;i++)//判断是不是回文日期 
    {
        if(a[i]!=a[7-i])
            return 0;   
    }
    return 1;
}
int ts(int nf,int yf)
{
    if(yf==2&&((nf%4==0&&nf%100!=0)||nf%400==0))//闰年2月
        return 29;
    else
        if(yf==2)//平年2月
            return 28;
    if(yf==1||yf==3||yf==5||yf==7||yf==8||yf==10||yf==12)
        return 31;
    else
        return 30;
}
int main()
{ 
    string rq1,rq2;
    //  年1↓年2↓月1↓月2↓日1↓日2↓ 
    int n1=0,n2=0,y1=0,y2=0,r1=0,r2=0,i,j,k,x=1000,ans=0; 
    getline(cin,rq1);
    getline(cin,rq2);
    for(i=1;i<=8;i++)
    {
        if(i==5||i==7)
            x=10;
        if(i<=4)//年 
        {
            n1+=(rq1[i-1]-'0')*x;
            n2+=(rq2[i-1]-'0')*x;
            x/=10;
        }
        if(i>4&&i<=6)//月 
        {
            y1+=(rq1[i-1]-'0')*x;
            y2+=(rq2[i-1]-'0')*x;
            x/=10;
        }
        if(i>6)//日 
        {
            r1+=(rq1[i-1]-'0')*x;
            r2+=(rq2[i-1]-'0')*x;
            x/=10;
        } 
    }
    //输入并转成年月日↑ 
    for(k=n1;k<=n2;k++)//年 
    {
        for(i=y1;i<=12;i++)//月 
        {
            for(j=r1;j<=ts(k,i);j++)//日 
            {
                ans+=hw(k,i,j);
                if(k==n2&&i==y2&&j==r2)
                {
                    cout<<ans;
                    return 0;
                }
            }
        }
    }
    return 0;
}

by GoldenFishX @ 2019-11-05 18:24:47

\color{#AEF}\colorbox{#EFF}{\text{~hw函数是用来看一个日期是不是回文。~}} \color{#AEF}\colorbox{#EFF}{\text{~ts函数是用来算末年末月有几天。~~~~~~~~~~~}}

|