1. 程式人生 > >[模擬] P1167 刷題

[模擬] P1167 刷題

日期模擬好像一直很弱

敲了好久

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

 if(ly(ya))    //leapyear month
            month[2] = 29;
        else
            month[2] = 28;

if(ly(ya))    //sum of leapyear days
            sum += 24 * 60 * 366;
        else
            sum += 24 * 60 * 365;
//#pragma GCC optimize(2)
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <vector>
#include <fstream>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;
typedef long long ll;

const int MAXN = 1e6 + 10;

int arr[MAXN];

int month[13] = {31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

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

int main()
{
    //ios::sync_with_stdio(false);

    //cin.tie(0);     cout.tie(0);

    int N, ans = 0;
    
    cin>>N;

    for(int i = 0; i < N; i++)
        scanf("%d", &arr[i]);

    sort(arr, arr + N);

    int ya, yb, ma, mb, da, db, ha, hb, mia, mib;

    char cu;

    cin>>ya>>cu>>ma>>cu>>da>>cu>>ha>>cu>>mia;

    cin>>yb>>cu>>mb>>cu>>db>>cu>>hb>>cu>>mib;

    //printf("%d %d %d %d %d\n", ya, ma, da, ha, mia);

    ll sum = 0, tdm = (hb * 60 + mib) - (ha * 60 + mia);

    while(ya < yb - 1)
    {
        if(ly(ya))
            sum += 24 * 60 * 366;
        else
            sum += 24 * 60 * 365;
        ya++;
    }

    while( !(ya == yb && ma == mb && da == db) )
    {
        sum += 24 * 60;

        if(ly(ya))
            month[2] = 29;
        else
            month[2] = 28;

        da++;

        if(da == month[ma] + 1)
        {
            ma++;
            da = 1;
        }

        if(ma == 13)
        {
            ya++;
            ma = 1;
        }
    }

    sum += tdm;

    //cout<<sum<<endl;

    for(int i = 0; i < N; i++)
    {
        sum -= arr[i];

        if(sum >= 0)
            ans++;
        else
            break;
    }

    cout<<ans<<endl;

    return 0;
}
/*
2
1
1
2007-06-22-12:40
2007-06-23-12:00
*/