P1167 刷题 [一道特别好的练习计算时间的题]

https://www.luogu.com.cn/problem/P1167
模拟,贪心,排序
黄色题
思路:
1.计算出时间差
2.最后特别简单的贪心
读入:
scanf("%d-%d-%d-%d:%d",&start[1],&start[2],&start[3],&start[4],&start[5]);
scanf("%d-%d-%d-%d:%d",&endd[1],&endd[2],&endd[3],&endd[4],&endd[5]);
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,time,ans;
int a[5010];
int m1[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int m2[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int start[10],endd[10];
bool check(int x)
{
    if((x%4==0 && x%400!=0) || x%400==0)
        return 1;
    return 0;
}
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",&start[1],&start[2],&start[3],&start[4],&start[5]);
    scanf("%d-%d-%d-%d:%d",&endd[1],&endd[2],&endd[3],&endd[4],&endd[5]);
    for(int i=start[1];i<endd[1];i++)
    {
        if(check(i))
            time+=366;
        else
            time+=365;
    }
    if(check(start[1]))
        for(int i=1;i<start[2];i++)
            time-=m2[i];
    else
        for(int i=1;i<start[2];i++)
            time-=m1[i];
    if(check(endd[1]))
        for(int i=1;i<endd[2];i++)
            time+=m2[i];
    else
        for(int i=1;i<endd[2];i++)
            time+=m1[i];
    for(int i=1;i<start[3];i++)
        time--;
    for(int i=1;i<endd[3];i++)
        time++;
    time=time*24*60;
    time-=60*start[4]+start[5];
    time+=60*endd[4]+endd[5];
    for(int i=1;i<=n;i++)
    {
        if(time>=a[i])
        {
            time-=a[i];
            ans++;
        }
        else
            break;
    }
    printf("%d",ans);
    return 0;
}

 

posted @ 2022-08-09 10:29  -イレイナ  阅读(99)  评论(0)    收藏  举报