1 条题解
-
1
#include "iostream" #include "stdio.h" #include "algorithm" #define II int #define LO long long #define R register #define I 123456 using namespace std; II t,n; LO d; LO a[I], b[I]; LO gg(R LO x) { return x<0 ? -x : x ; } LO smaler(R LO a,R LO b) { return a<b ? a : b ; } int main() { scanf("%d",&t); while (t--) { scanf("%d%lld",&n,&d); for(R II i=1;i<=n;i++) scanf("%lld",&a[i]); if(gg(a[n]-a[1])>d*(n-1)) { printf("impossible\n"); continue ; } b[1]=a[1]; for(R II i=2;i<=n;i++) b[i]=b[i-1]-d; while (b[n]!=a[n]) { R LO low=0,up=0,wei,oo=-1e18,op=1e18, ko=0; for(R II i=n;i>1;i--) { a[i]>b[i] ? low++ : up++ ; if(a[i]>b[i]) { op=smaler(op,a[i]-b[i]); } if(low-up>=oo && b[i-1]+d!=b[i]) { oo=low-up; wei=i; ko=op; } } ko=smaler(ko,b[wei-1]+d-b[wei]); for(R II i=wei;i<=n;i++) b[i]+=ko; } R LO ans=0; for(R II i=1;i<=n;i++) ans+=gg(a[i]-b[i]); printf("%lld\n",ans); } exit(0); }
- 1
信息
- ID
- 2138
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 6
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者