2 条题解
-
0
这是100分程序 f[i]=f[j]+ A*(sx[i]-sx[j])(sx[i]-sx[j])+B(sx[i]-sx[j])+C f[i]= f[j] + Asx[i]^2 + Asx[j]^2 - 2Asx[i]sx[j] + Bsx[i] - Bsx[j] + C 2Asx[i]sx[j] + f[i] - Asx[i]^2 - Bsx[i]- C = f[j] + Asx[j]^2 - Bsx[j] yj=f[j] + Asx[j]^2 - Bsx[j] xj=2.0Asx[j] k=sx[i] b= f[i] - Asx[i]^2 - Bsx[i] -C
#include <bits/stdc++.h> using namespace std; const int N=1110000; typedef long long LL; LL x[N],sx[N],f[N],A,B,C; int q[N]; inline double X(int j){return 2.0*A*sx[j];} inline double Y(int j){return 1.0*(f[j]+A*sx[j]*sx[j]-B*sx[j]);} inline double slop(int j1,int j2){return (X(j2)==X(j1))?1e18*( Y(j2)-Y(j1) ):( Y(j2)-Y(j1) )/( X(j2)-X(j1) );} int main() { int n;scanf("%d",&n);scanf("%lld%lld%lld",&A,&B,&C); sx[0]=0;f[0]=0; for(int i=1;i<=n;i++)scanf("%lld",&x[i]),sx[i]=sx[i-1]+x[i]; int l=1,r=1;q[1]=0; for(int i=1;i<=n;i++) { while(l<r && slop(q[l],q[l+1])<=1.0*sx[i] )l++; LL t=sx[i]-sx[q[l]]; f[i]=f[q[l]]+ A*t*t + B*t + C ; while(l<r && slop(q[r-1],q[r])>=slop(q[r],i) )r--; q[++r]=i; } printf("%lld\n",f[n]); return 0; } -
0
/* 这是100分程序 f[i]=f[j]+ A*(sx[i]-sx[j])*(sx[i]-sx[j])+B*(sx[i]-sx[j])+C f[i]= f[j] + A*sx[i]^2 + A*sx[j]^2 - 2A*sx[i]*sx[j] + B*sx[i] - B*sx[j] + C 2A*sx[i]*sx[j] + f[i] - A*sx[i]^2 - B*sx[i]- C = f[j] + A*sx[j]^2 - B*sx[j] yj=f[j] + A*sx[j]^2 - B*sx[j] xj=2.0*A*sx[j] k=sx[i] b= f[i] - A*sx[i]^2 - B*sx[i] -C */ #include<bits/stdc++.h> using namespace std; const int N=1110000; typedef long long LL; LL x[N],sx[N],f[N],A,B,C; int q[N]; inline double X(int j){return 2.0*A*sx[j];} inline double Y(int j){return 1.0*(f[j]+A*sx[j]*sx[j]-B*sx[j]);} inline double slop(int j1,int j2){return (X(j2)==X(j1))?1e18*( Y(j2)-Y(j1) ):( Y(j2)-Y(j1) )/( X(j2)-X(j1) );} int main() { int n;scanf("%d",&n);scanf("%lld%lld%lld",&A,&B,&C); sx[0]=0;f[0]=0; for(int i=1;i<=n;i++)scanf("%lld",&x[i]),sx[i]=sx[i-1]+x[i]; int l=1,r=1;q[1]=0; for(int i=1;i<=n;i++) { while(l<r && slop(q[l],q[l+1])<=1.0*sx[i] )l++; LL t=sx[i]-sx[q[l]]; f[i]=f[q[l]]+ A*t*t + B*t + C ; while(l<r && slop(q[r-1],q[r])>=slop(q[r],i) )r--; q[++r]=i; } printf("%lld\n",f[n]); return 0; }
- 1
信息
- ID
- 3576
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 31
- 已通过
- 12
- 上传者