WA50分,不知道为啥

P1167 刷题

LemonJuice95 @ 2020-10-12 21:33:31

#include<bits/stdc++.h>
using namespace std;
int y,m,d,s,f,yy,mm,dd,ss,ff,fs,cnt;
int n,t[10005];
queue<int> q;
int month(int mon)
{
    if(mon==1 || mon==3 || mon==5 || mon==7 || mon==8 || mon==10 || mon==12)
        return 31;
    if(mon==2)
    {
        if(y%4==0 && y%100!=0 || y%400==0)
            return 29;
        else
            return 28;
    }
    return 30;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&t[i]);
    scanf("%4d-%2d-%2d-%2d:%2d",&y,&m,&d,&s,&f);
    scanf("%4d-%2d-%2d-%2d:%2d",&yy,&mm,&dd,&ss,&ff);
    sort(t+1,t+n+1);
    for(int i=1;i<=n;i++)
        q.push(t[i]);
    while((y<yy || m<mm || d<dd || s<ss || f<ff) && !q.empty())
    {
        f+=q.front();
        q.pop();
        if(f>=60)
            f=0,s++;
        if(s>=24)
            s=0,d++;
        if(d>=month(m))
            d=0,m++;
        if(m>12)
            m=0,y++;
        cnt++;

    }
    printf("%d",cnt);
    return 0;
}

我是真不知道咋回事了,超时倒是不至于


by DIgnited @ 2020-10-12 21:44:10

我的

#include<bits/stdc++.h>
using namespace std;
int n,times,ans;
int a[10000];
int m1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int m2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int x[10],y[10];
bool scg(int y)
{
    if((y%4==0 && y%400!=0) || y%400==0)
        return true;
    return false;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    scanf("%d-%d-%d-%d:%d",&x[1],&x[2],&x[3],&x[4],&x[5]);
    scanf("%d-%d-%d-%d:%d",&y[1],&y[2],&y[3],&y[4],&y[5]);
    for(int i=x[1];i<y[1];i++)
    {
        if(scg(i)==true)
            times+=366;
        else
            times+=365;
    }
    if(scg(x[1]))
        for(int i=1;i<x[2];i++)
            times-=m2[i];
    else
        for(int i=1;i<x[2];i++)
            times-=m1[i];
    if(scg(y[1]))
        for(int i=1;i<y[2];i++)
            times+=m2[i];
    else
        for(int i=1;i<y[2];i++)
            times+=m1[i];
    for(int i=1;i<x[3];i++)
        times--;
    for(int i=1;i<y[3];i++)
        times++;
    times*=24*60;
    times-=60*x[4]+x[5];
    times+=60*y[4]+y[5];
    for(int i=1;i<=n;i++)
    {
        if(times>=a[i])
        {
            times-=a[i];
            ans++;
        }
        else
            break;
    }
    printf("%d",ans);
    return 0;
}

by DIgnited @ 2020-10-12 21:44:27

@Acceleratorst 参考一下


|