合并果子,但是快读TLE
查看原帖
合并果子,但是快读TLE
270854
二叉苹果树楼主2022/9/3 23:41
#include<bits/stdc++.h>
using namespace std;
long long q[1000005],p[1000005];
int m[1000005];
int n,a,cnt1,cnt2,top1,top2;
long long ans;
long long read()
{
    long long x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
        ch=getchar();
    while(ch>='0'&&ch<='9')
    {
        x=(x<<1)+(x<<3)+ch-'0';
        ch=getchar();
    }
    return x*f;
}
int main()
{
    n=read();
    for(int i=1;i<=n;i++)
    {
        a=read();
        m[a]++;
    }
    for(int i=1;i<=1000000;i++)
        if(m[i])
            for(int j=1;j<=m[i];j++)
                q[++cnt1]=i;
    top1=top2=1;
    for(int i=1;i<=n-1;i++)
    {
        if(q[top1]==0)
            q[top1]=LONG_LONG_MAX;
        if(q[top1+1]==0)
            q[top1+1]=LONG_LONG_MAX;
        if(p[top2]==0)
            p[top2]=LONG_LONG_MAX;
        if(p[top2+1]==0)
            p[top2+1]=LONG_LONG_MAX;
            if(p[top2+1]<q[top1])
                p[++cnt2]=p[top2]+p[top2+1],ans+=p[cnt2],top2+=2;
            else if(p[top2]<q[top1+1])
                p[++cnt2]=p[top2]+q[top1],ans+=p[cnt2],top1++,top2++;
            else
                p[++cnt2]=q[top1]+q[top1+1],ans+=p[cnt2],top1+=2;
    }
    printf("%lld\n",ans);
    return 0;
}

用scanf差一点点就过了,加了快读就成了RE

求助

2022/9/3 23:41
加载中...