Codeforces Round 983 (Div. 2) 小结
<Dashboard - Codeforces Round 983 (Div. 2) - Codeforces>
这场瑕疵非常多,绝对不仅于能力问题,因此非常需要总结。
首先在 \(B\) 吃了一个罚时,原因竟是某个换行符丢了。
然后在 \(C\) 又吃了一个罚时,原因是太想当然了?
在此耽误了一些时间。
但总的还可以接受,\(26\) \(min\) 过完前三题。
对于题 \(D\) ,其实也是对某些题意进行了误审,遗漏。
忽视了最关键的一条 \(:\) 父亲的编号大小是单调递增的。
文章便也因此而来。
不仅因此吃了一罚,而且还耽误了 \(15\) \(min\) 左右。
当然,最关键的问题还是在 \(E\) 。
其实一开始我就发现了是解方程,并且会解。
但我在解第二次时又想当然了。
并且最后在调试样例的时候,极其没有耐心。
两眼放空在那里发呆。
下次在显然时,再想想条件。
对于样例,手动模拟进去。
#include<cstdio>
const int N=500020;
int n;
long long f[N],g[N],c[N],a[N];
long long min(long long x,long long y){
return x<y?x:y;
}
void work(){
scanf("%d",&n);
long long cnt=0;
for(int i=1;i<=n;i++)scanf("%lld",f+i);
for(int i=2;i<=n;i++)g[i]=f[i]-f[i-1];
g[1]=f[1]-f[n];
for(int i=1;i<=n;i++)g[i]=-g[i];
c[1]=0;
for(int i=3;i<=2*n;i+=2)c[(i-1)%n+1]=g[(i-1)%n+1]+c[(i-3)%n+1];
for(int i=1;i<=n;i++)cnt+=c[i];
if(cnt&1){
cnt=0;
for(int i=1;i<=n;i++)c[i]++,cnt+=c[i];
}
cnt/=2;
int l=2,r=l+(n-1)-2;
long long now=0;
for(int i=2;i<=r;i+=2)now+=c[i];
for(int i=1;i<=2*n;i+=2){
a[(i-1)%n+1]=cnt-now;
r=(r+2-1)%n+1;
now=now-c[l]+c[r];
l=(l+2-1)%n+1;
}
long long mn=100000009;
for(int i=1;i<=n;i++)mn=min(mn,a[i]);
for(int i=1;i<=n;i++)a[i]+=-mn;
for(int i=1;i<=n;i++)printf("%lld ",a[i]);
puts("");
}
int main(){
// freopen("a.in","r",stdin);
int t;
scanf("%d",&t);
while(t--)work();
return 0;
}

浙公网安备 33010602011771号