求助,本地跑的和评测机跑的结果不一致
查看原帖
求助,本地跑的和评测机跑的结果不一致
749175
114514xxx楼主2024/11/1 15:04

Record,本地跑得出0,洛谷却跑出了-1.

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+25;
int f[1<<17];
int k,n;
int a[30],b[N],s[N];
inline int find(int l,int r,int p){
    int st=s[l],res=l;
    while(l<=r){
        int mid=(l+r)/2;
        if(s[mid]-st<=p)res=l,l=mid+1;
        else r=mid-1;
    }
    return res;
}
int ans=-1;
signed main(){
    //freopen("3094_4.in","r",stdin);
    //freopen("test.out","w",stdout);
    cin>>k>>n;
    for(int i=1;i<=k;++i)
        cin>>a[i];
    for(int i=1;i<=n;i++)
        cin>>b[i];
    //sort(b+1,b+1+n);
    for(int i=1;i<=n;i++)
        s[i]=s[i-1]+b[i];
    for(int i=0;i<=(1<<k);i++){
        for(int j=1;j<=k;++j){
            if((i>>(j-1))&1)continue;
            f[i|(1<<(j-1))]=max(f[i|(1<<(j-1))],find(f[i],n,a[j]));
        }
        //cout<<f[i]<<endl;
        if(f[i]==n){
            int cnt=0;
            ans=max(ans,cnt);
            for(int j=1;j<=k;++j){
                if((i>>(j-1))&1)continue;
                else cnt+=a[j];
                ans=max(ans,cnt);
                //cout<<cnt<<endl;
            }
        }
    }
    cout<<ans<<endl;
}

2024/11/1 15:04
加载中...