<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;
}