90分求助

P1167 刷题

星际联盟 @ 2020-02-09 17:11:43

#include <bits/stdc++.h>
#define re register

using namespace std;

typedef long long ll;
const int N=1e4,M=2e4;

//¶¨Òåʱ¼ä 
struct tim{
    int y,m,d,h,mi;
}st,ed;

//¶¨Òå±äÁ¿ 
ll n,ans=0,all=0;
ll a[N],sum[N];
int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool mark[M];
ll runy[13][35][25][65],unruny[13][35][25][65];

//¼ì²éÊÇ·ñΪÈòÄê 
bool check(int k)
{
    if(k%400!=0 && k%4==0) return true;
    else if(k%400==0 && k%100!=0) return true;
    return false;
}

//¼ì²ést,edÊÇ·ñÏàͬ 
bool sam(const tim &A,const tim &B)
{
    return (A.y==B.y && A.m==B.m && A.d==B.d && A.h==B.h && A.mi==B.mi);
}

//Ä£ÄâÿһÌì 
void add(ll res[13][35][25][65],ll cnt)
{
    if(cnt) month[2]=29;
    int tot=0; 
    for(re int i =1;i<=12;i++)
        for(re int j =1;j<=month[i];j++)
            for(re int k=0;k<=23;k++)
                for(re int l=0;l<=59;l++)
                    res[i][j][k][l]=(++tot);
    month[2]=28;
}

//³õʼ»¯
void Init()
{
    sort(a+1,a+n+1);
    for(re int i =1;i<=n;i++)
        sum[i]=sum[i-1]+a[i];
    for(re int i=0;i<=9999;i++)
        if(check(i)) mark[i]=1;
    add(runy,1);
    add(unruny,0);
    return ;
}

//Ëã·¨ºËÐÄ 
void Do()
{

    //ËãÖмäÄêʱ¼ä 
    for(re int i=st.y+1;i<=ed.y-1;i++)
    {   
        if(mark[i]) all=all+(366*24*60);
        else all=all+(365*24*60);
    }

    //Ä£ÄâÆäËûʱ¼ä
    if(st.y==ed.y)
    {
        if(mark[st.y]) all+=(runy[ed.m][ed.d][ed.h][ed.mi]-runy[st.m][st.d][st.h][st.mi]+1);
        else all+=(unruny[ed.m][ed.d][ed.h][ed.mi]-unruny[st.m][st.d][st.h][st.mi]+1);;
    }
    else
    {
        if(mark[st.y]) all+=(runy[12][31][23][59]-runy[st.m][st.d][st.h][st.mi]+1);
        else all+=(unruny[12][31][23][59]-unruny[st.m][st.d][st.h][st.mi]+1);
        if(mark[ed.y]) all+=(runy[ed.m][ed.d][ed.h][ed.mi]-runy[1][1][0][0]+1);
        else all+=(unruny[ed.m][ed.d][ed.h][ed.mi]-unruny[1][1][0][0]+1);
    }

    //ÕÒµ½Î»Öà 
    for(re int i =1;i<=n;i++)
        if(sum[i]<=all)
            ans=i;
    printf("%lld\n",ans);
    return ;
}

//Ö÷º¯Êý 
int main()
{

    //¶ÁÈë 
    scanf("%lld",&n);
    for(re int i=1;i<=n;i++)
        scanf("%lld",&a[i]);
    scanf("%d-%d-%d-%d:%d",&st.y,&st.m,&st.d,&st.h,&st.mi);
    scanf("%d-%d-%d-%d:%d",&ed.y,&ed.m,&ed.d,&ed.h,&ed.mi);

    //ÅжÏÊÇ·ñÏàͬ 
    if(sam(st,ed)){printf("0\n");return 0;}

    Init();
    Do();
    return 0;
}

by 星际联盟 @ 2020-02-09 17:13:39

虽然方法暴力,还是只得了90分


by Yukinoshita_Yukino @ 2020-02-09 17:45:32

ÕÒµ½Î»ÖÃ?


by 风之影音 @ 2020-04-02 10:25:41

下载数据不香吗


|