只得了三个AC(T - T)

P1167 刷题

k52g @ 2024-08-13 19:58:24

得了三个AC,其余的不知道错在哪?
求大佬们指点

#include<bits/stdc++.h>
using namespace std;
int n;
int yyyy,mm,dd,hh,MM;
int yyy2,m2,d2,h2,M2;
int a[5000+10];
char ch[8+2];
long long ll,rr;
int cmp;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    cin>>yyyy>>ch[1]>>mm>>ch[2]>>dd>>ch[3]>>hh>>ch[4]>>MM;
    cin>>yyy2>>ch[1]>>m2>>ch[2]>>d2>>ch[3]>>h2>>ch[4]>>M2;
    if(yyyy%100==0||yyyy%4!=0){
        if(yyyy%100==0&&yyyy%400==0){
            ll+=yyyy*366*24*60;
        }else{
            ll+=yyyy*365*24*60;
        }
    }else{
        ll+=yyyy*366*24*60;
    }   
    if(mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12){
        ll+=31*24*60;
    }else if(mm==2){
        if(yyyy%100==0||yyyy%4!=0){
            if(yyyy%100==0&&yyyy%400==0){
                ll+=29*24*60;
            }else{
                ll+=28*24*60;
            }
        }else{
            ll+=29*24*60;
        }
    }else{
        ll+=30*24*60;
    }
    ll+=dd*24*60+hh*60+MM;
    //___________________________________________________
    if(yyy2%100==0||yyy2%4!=0){
        if(yyy2%100==0&&yyy2%400==0){
            rr+=yyy2*366*24*60;
        }else{
            rr+=yyy2*365*24*60;
        }
    }else{
        rr+=yyy2*366*24*60;
    }   
    if(m2==1||m2==3||m2==5||m2==7||m2==8||m2==10||m2==12){
        rr+=31*24*60;
    }else if(m2==2){
        if(yyy2%100==0||yyy2%4!=0){
            if(yyy2%100==0&&yyy2%400==0){
                rr+=29*24*60;
            }else{
                rr+=28*24*60;
            }
        }else{
            rr+=29*24*60;
        }
    }else{
        rr+=30*24*60;
    }
    rr+=d2*24*60+h2*60+M2;
    //___________________________________________________
    int ji=rr-ll;
    sort(a+1,a+n+1);
    for(int i=1; ;i++){
        if(ji>=a[i]){
            cmp++;
            ji-=a[i];
        }else{
            break;
        }
    }
    cout<<cmp;
    return 0;
}

谢谢大佬们


by lin20081016 @ 2024-08-13 20:14:32

我有一个简单的歪招,直接从开始日期一天一天加,每次用类似进位的方式判断年月的增减,直到距离考试时间不足一天,这样只要依据加上的天数(一天86400分钟)和剩下的时间差判断就好了,10000年只有约3650000天,不会超时


by lin20081016 @ 2024-08-13 20:40:06

说错了是1440分钟


by k52g @ 2024-08-16 12:49:31

@lin20081016 谢谢,我试一下


|