求助:AC / WA 85 之间的区别?
查看原帖
求助:AC / WA 85 之间的区别?
365654
封禁用户楼主2022/3/26 08:10
#include<bits/stdc++.h>
using namespace std;
int _tm[4000312],a[512],talrc[4000312],qz[512];
int f(int x)
{
    return x>=0?x:0;
}
int main()
{
    int n,m;
    cin>>n>>m;
    memset(a,-1,sizeof(a));
    for(int i=1;i<=n;i++)
        cin>>a[i];
    sort(a+1,a+n+1);
    while(a[talrc[0]+1]==0) talrc[0]++;
    for(int i=1;i<=4000300;i++)
    {
        talrc[i]=talrc[i-1];
        while(a[talrc[i]+1]==i) talrc[i]++;
    }
    qz[1]=a[1];
    for(int i=2;i<=n;i++)
        qz[i]=qz[i-1]+a[i];
    _tm[0]=0;
    for(int i=1;i<=4000300;i++)
    {
        if(talrc[i]==talrc[f(i-m-m)])
        {
            _tm[i]=_tm[f(i-m)];
            continue;
        }
        _tm[i]=2147483647;
        if(i<m) _tm[i]=talrc[i]*i-qz[talrc[i]];
        for(int j=i-m;j>=f(i-m-m);j--)
            _tm[i]=min(_tm[i],_tm[j]+(talrc[i]-talrc[j])*i-(qz[talrc[i]]-qz[talrc[j]]));
    }
    /*
    //X
    int ans=2147483647;
    for(int i=a[n];i<=4000300;i++)
        ans=min(ans,_tm[i]);
    cout<<ans;
    */
    /*
    //Y
    cout<<_tm[4000300];
    */
    return 0;
}

为什么使用 X 段可以 AC,使用 Y 段就会 WA 85?

2022/3/26 08:10
加载中...