50pts 不知为什么出现负数了

P1167 刷题

A宋锦瑞A @ 2023-07-11 10:06:17

#include <bits/stdc++.h>

using namespace std;

int s[1001],e[1001];
int n;
long long times;
int ans;
int a[10010];

int m[1024]= {0,31,28,31,30,31,30,31,31,30,31,30,31};

bool check(int x) {
    return (x%400==0||(x%4==0&&x%100!=0));
}

int main() {
    scanf("%d",&n);
    for(int i=0; i<n; i++) {
        scanf("%d",&a[i]);
    }
    sort(a,a+n);
    scanf("%d-%d-%d-%d:%d",&s[0],&s[1],&s[2],&s[3],&s[4]);
    scanf("%d-%d-%d-%d:%d",&e[0],&e[1],&e[2],&e[3],&e[4]);
    for(int i=s[0]; i<e[0]; i++) {
        if(check(i)) {
            times+=366;
        } else {
            times+=365;
        }
    }
    if(check(s[0])) {
        m[2]=29;
    } else {
        m[2]=28;
    }
    for(int i=1; i<s[0]; i++) {
        times-=m[i];
    }
    for(int i=1; i<e[0]; i++) {
        times+=m[i];
    }
    for(int i=1; i<s[1]; i++) {
        times--;
    }
    for(int i=1; i<e[1]; i++) {
        times++;
    }
    times=times*24*60;
    times-=60*s[3]+s[4];
    times+=60*e[3]+e[4];
    for(int i=0; i<n; i++) {
        if(times>=a[i]) {
            times-=a[i];
            ans++;
        } else {
            break;
        }
    }
    printf("%d",ans);

    return 0;
}
/*
2007 05 31 11 59
2008 04 01 12 00
*/

by A宋锦瑞A @ 2023-07-11 10:21:09

#include <bits/stdc++.h>

using namespace std;

int s[1001],e[1001];
int n;
long long times;
int ans;
int a[10010];

int m[1024]= {0,31,28,31,30,31,30,31,31,30,31,30,31};

bool check(int x) {
    return (x%400==0||(x%4==0&&x%100!=0));
}

void feb(int x) {
    if(check(x)) {
        m[2]=29;
    } else {
        m[2]=28;
    }
}

int main() {
    scanf("%d",&n);
    for(int i=0; i<n; i++) {
        scanf("%d",&a[i]);
    }
    sort(a,a+n);
    scanf("%d-%d-%d-%d:%d",&s[0],&s[1],&s[2],&s[3],&s[4]);
    scanf("%d-%d-%d-%d:%d",&e[0],&e[1],&e[2],&e[3],&e[4]);
    for(int i=s[0]; i<e[0]; i++) {
        if(check(i)) {
            times+=366;
        } else {
            times+=365;
        }
    }
    //year -> h
    feb(s[0]);
    for(int i=1; i<s[0]; i++) {
        times-=m[i];
    }
    feb(e[0]);
    for(int i=1; i<e[0]; i++) {
        times+=m[i];
    }
    //moon -> h
    for(int i=1; i<s[1]; i++) {
        times-=24;
    }
    for(int i=1; i<e[1]; i++) {
        times+=24;
    }
    //days -> h
    for(int i=1; i<s[2]; i++) {
        times--;
    }
    for(int i=1; i<e[2]; i++) {
        times++;
    }
    //day -> min
    times=times*24*60;
    times-=60*s[3]+s[4];
    times+=60*e[3]+e[4];
    //sum++
    for(int i=0; i<n; i++) {
        if(times>=a[i]) {
            times-=a[i];
            ans++;
        } else {
            break;
        }
    }
    //out
    printf("%d",ans);

    return 0;
}
/*
2007 05 31 11 59
2008 04 01 12 00
*/

改了一点,现在70pts


by 1234567890hh @ 2023-08-18 16:07:32

没开


long long

by 480624Wzh @ 2023-09-22 15:12:40

你小子已经见了祖宗 没开long long


by __szh_DNCB__ @ 2023-09-24 18:55:16

这种压根就没有减法的题如果是负数只有一种可能:\ 爆int啦!\ 这种时候应该赶紧打开long long,避免见祖宗


by vectoras @ 2024-08-08 15:20:50

可能数据太大,溢出了。 建议开long long.


|