求助

P1167 刷题

Pink_Cut_Tree @ 2023-05-17 17:37:49

#include<iostream>
#include<algorithm>
using namespace std;
int t[5005],n,y1,y2,m1,m2,d1,d2,h1,h2,min1,min2;
int day_of_year(int x){
    if(x%4==0){
        if(x%4==100){
            if(x%400==0){
                return 366;
            }
            else{
                return 365;
            }
        }
        else{
            return 366;
        }
    }
    else{
        return 365;
    }
}
int day_of_month(int x,int year){
    if(x==1||x==3||x==5||x==7||x==8||x==10||x==12){
        return 31;
    }
    if(x==4||x==6||x==9||x==11){
        return 30;
    }
    if(day_of_year(year)==365){
        return 28;
    }
return 29;
}
long long minute(int y1,int y2,int m1,int m2,int d1,int d2,int h1,int h2,int min1,int min2){
    long long ans=0;
    long long day1=0,day2=0;
    for(int i=1;i<=y1;i++){
        day1+=day_of_year(i);
    }
    for(int i=1;i<=m1;i++){
        day1+=day_of_month(i,y1);
    }
    day1+=d1;
    for(int i=1;i<=y2;i++){
        day2+=day_of_year(i);
    }
    for(int i=1;i<=m2;i++){
        day2+=day_of_month(i,y2);
    }
    day2+=d2;
    ans=(day2-day1)*24*60;
    //cout<<ans<<"\n";
    ans+=(h2-h1)*60;
    ans+=min2-min1;
return ans;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>t[i];
    }
    scanf("%d-%d-%d-%d:%d",&y1,&m1,&d1,&h1,&min1);
    scanf("%d-%d-%d-%d:%d",&y2,&m2,&d2,&h2,&min2);
    sort(t+1,t+n+1);
    long long ans=minute(y1,y2,m1,m2,d1,d2,h1,h2,min1,min2);
    int sum=0;
    for(int cnt=1;ans>=t[cnt-1];cnt++){
        ans-=t[cnt];
        sum++;
        if(cnt==n){
            break;
        }
    }
    cout<<sum;
return 0;
}

by yzm0325 @ 2023-05-18 19:05:24

@PCT2506 给你一组 hack 数据自己调调试试:

1
2
2007-12-31-23:59
2008-01-01-00:00

|