蒟蒻求助

P2010 [NOIP2016 普及组] 回文日期

霍士弘 @ 2019-02-04 10:56:37

#include<iostream>   
#include<cstdio>
#include<cmath>
#include<string>

using namespace std;
int change(string s)
{
    int num = 0;
    for(int i = 0;i < s.size();i++)
    {
        num = num * 10 + (s[i] - '0');
    }
    return num;
}
int isrun(int n)
{
    if(n % 4 == 0 && n % 100 != 0)
    {
        return 1;
    }
    if(n % 400 == 0)
    {
        return 1;
    }
    return 0;
}
int isone(int n)
{
    if(n >= 0 && n <= 10)
    {
        return 1;
    }
    return 0;
}
int isround(int i,int j,int k)
{
    if(isone(j) && isone(k))
    {
        if(i / 1000 == k%10 && i/100%10 == 0 && i/10%10 == j%10 && i%10 == 0)
        {
            return 1;
        }else
        {
            return 0;
        }
    }else if(isone(j) && !isone(k))
    {
        if(i / 1000 == k % 10 && i/100%10 == k/10%10 && i/10%10 == j%10 && i%10 == 0)
        {
            return 1;
        }else
        {   
            return 0;
        }
    }else if(!isone(j) && isone(k))
    {
        if(i/1000 == k % 10 && i/100%10 == 0 && i/10%10 == j%10 && i%10 == j/10%10)
        {
            return 1;
        }else
        {
            return 0;
        }
    }else if(!isone(j) && !isone(k))
    {
        if(i/1000 == k%10 && i/100%10 == k/10%10 && i/10%10 == j%10 && i%10 == j/10%10)
        {
            return 1;
        }else
        {
            return 0;
        }
    }
}

int main()
{

    string d1,d2;
    cin>>d1>>d2;
    int d1y,d1m,d1d,d2y,d2m,d2d;

    d1y = change(d1.substr(0,4));
    d2y = change(d2.substr(0,4));
    d1m = change(d1.substr(4,2));
    d2m = change(d2.substr(4,2));
    d1d = change(d1.substr(6,2));
    d2d = change(d2.substr(6,2));
    int cnt = 0;

    int run[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
    int norun[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    if(d1 == d2)
    {
        if(isround(d1y,d1m,d1d))
        {
            cnt = 1;
            cout<<cnt;
        }

        cout<<cnt;
        return 0;
    }
    for(int i = d1y;i <= d2y;i++)
    {
        for(int j = 1;j <= 12;j++)
        {
            for(int k = 1;k <= 31;k++)
            {
                //ÉÏϱ߽紦Àí
                //up
                if(i == d2y && j == d2m && k > d2d)
                {
                    break;
                }
                if(i == d2y && j > d2m)
                {
                    break;
                }
                //down
                if(i == d1y && j == d1m && k < d1d)
                {
                    break;
                }
                if(i == d1y && j < d1m)
                {
                    break;
                }
                //------------------------------------------
                if(isrun(i) && k > run[j-1])
                {
                    continue;
                }
                if(!isrun(i) && k > norun[j-1])
                {
                    continue;
                }

                //ÅжϻØÎÄÊý 
                if(isround(i,j,k))
                {
                    cnt++;
                }
            }

        }
    }

    cout<<cnt;
}

求助


by Smile_Cindy @ 2019-02-04 11:06:33

@霍士弘

#include <bits/stdc++.h>
using namespace std;
int month(int k)
{
    switch(k)
    {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:return 31;
        case 2:return 29;
        default:return 30;
    }
}
int main()
{
    int sy,sm,sd;
    int ey,em,ed;
    scanf("%4d%2d%2d",&sy,&sm,&sd);
    scanf("%4d%2d%2d",&ey,&em,&ed);
    int ans=0;
    for(int i=sy;i<=ey;i++)
    {
        int mon=i%10*10+i%100/10;
        int day=i/1000+i%1000/100*10;
        if(mon<1||mon>12)continue;
        if(day<1||day>month(mon))continue;
        if(i==ey)
        {
            if(mon>em)continue;
            else if(mon==em&&day>ed)continue;
        }
        ans++;
    }
    printf("%d\n",ans);
    return 0;
}

by cindy2007 @ 2019-02-04 11:15:25

您是洛谷春令营的吧(当然我也是)


by 霍士弘 @ 2019-02-04 15:59:10

@cindy2007 我不是


|