社区讨论

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 条回复,欢迎继续交流。

正在加载回复...