社区讨论
95pts WA求调
P5785[SDOI2012] 任务安排参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mljd0nhp
- 此快照首次捕获于
- 2026/02/12 19:12 7 天前
- 此快照最后确认于
- 2026/02/15 10:55 4 天前
不是这能错哪儿了qwq,怎么错在第11位上而且与答案相差1,提交记录
感谢乐于助人的大佬。
CPP// g[i]=min g[j]+p[i](pf[i]-pf[j])+s(pf[n]-pf[j])
#include<iostream>
#include<cstring>
#include<algorithm>
#define int long long
#define x(i) pf[i]
#define y(i) g[i]
using namespace std;
int n,s,t[300005],c[300005],p[300005],pf[300005],g[300005],q[300005],ta;
double aux[300005];
double slope(int a,int b){
return (y(a)-y(b))*1.0/(x(a)-x(b));
}
signed main(){
cin>>n>>s;
memset(g,0x3f,sizeof(g));
g[0]=0;
for(int i=1;i<=n;i++) cin>>t[i]>>c[i];
for(int i=1;i<=n;i++) p[i]=p[i-1]+t[i];
for(int i=1;i<=n;i++) pf[i]=pf[i-1]+c[i];
q[ta++]=0;
for(int i=1;i<=n;i++){
int k=q[lower_bound(aux,aux+ta-1,1.0*(p[i]+s))-aux];
if(ta==1) k=q[0];
g[i]=g[k]+p[i]*(pf[i]-pf[k])+s*(pf[n]-pf[k]);
while(ta>1&&(y(q[ta-2])-y(q[ta-1]))*(x(q[ta-1])-x(i))>=(y(q[ta-1])-y(i))*(x(q[ta-2])-x(q[ta-1]))) ta--;
q[ta++]=i;
if(ta>1) aux[ta-2]=slope(q[ta-2],q[ta-1]);
}
cout<<g[n];
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...