Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
67907 Alphys 炸弹 C++ 运行出错 0 0 MS 344 KB 2123 2023-01-20 20:37:44

Tests(0/10):


#include<bits/stdc++.h> using namespace std; const int MAXN = 2010; struct node{ int x,y; }a[MAXN]; vector<long long> w[MAXN],_w[MAXN],ly; long long f[MAXN],ans[MAXN]; int lst[MAXN]; int INF=0x3f3f3f3f; int main(){ freopen("boom.in","r",stdin); freopen("boom.out","w",stdout); int n; scanf("%d", &n); for(int i=1;i<=n;i++){ scanf("%d%d", &a[i].x, &a[i].y); ly.push_back(a[i].y); } sort(ly.begin(),ly.end()); int ks=unique(ly.begin(),ly.end())-ly.begin(); for(int i=1;i<=n;i++){ int t=lower_bound(ly.begin(),ly.begin()+ks,a[i].y)-ly.begin(); if(a[i].x>=0)w[t].push_back(a[i].x); else _w[t].push_back(-a[i].x); } for(int i=0;i<ks;i++)sort(w[i].begin(),w[i].end()); for(int i=0;i<ks;i++)sort(_w[i].begin(),_w[i].end()); memset(f,0x3f,sizeof(f)); memset(ans,0x3f,sizeof(ans)); f[0]=0; for(int i=0;i<ks;i++){ memset(lst,0x3f,sizeof(lst)); for(int j=n;j>0;j--){ for(int k=0;k<w[i].size();k++) if(j>=k+1&&f[j]>f[j-k-1]+w[i][k]*2){ lst[j]=k; f[j]=f[j-k-1]+w[i][k]*2; ans[j]=min(ans[j],f[j]+ly[i]-w[i][k]); } } for(int j=n;j>0;j--){ for(int k=0;k<_w[i].size();k++){ if(j>=k+1&&f[j]>f[j-k-1]+_w[i][k]*2){ f[j]=f[j-k-1]+_w[i][k]*2; ans[j]=min(ans[j],f[j]+ly[i]-_w[i][k]); if(lst[j-k-1]!=INF)ans[j]=min(ans[j],f[j]+ly[i]-w[i][lst[j-k-1]]); } } } } memset(f,0x3f,sizeof(f)); f[0]=0; for(int i=0;i<ks;i++){ memset(lst,0x3f,sizeof(lst)); for(int j=n;j>0;j--){ for(int k=0;k<_w[i].size();k++){ if(j>=k+1&&f[j]>f[j-k-1]+_w[i][k]*2){ f[j]=f[j-k-1]+_w[i][k]*2; ans[j]=min(ans[j],f[j]+ly[i]-_w[i][k]); if(lst[j-k-1]!=INF)ans[j]=min(ans[j],f[j]+ly[i]-w[i][lst[j-k-1]]); } } } for(int j=n;j>0;j--){ for(int k=0;k<w[i].size();k++) if(j>=k+1&&f[j]>f[j-k-1]+w[i][k]*2){ lst[j]=k; f[j]=f[j-k-1]+w[i][k]*2; ans[j]=min(ans[j],f[j]+ly[i]-w[i][k]); } } } for(int i=1;i<=n;i++)printf("%lld\n", ans[i]); return 0; } /* 10 -21 266 666 161 726 99 683 161 -819 266 9 161 493 99 -416 266 -483 241 748 276 */


测评信息: