Tokio Marine & Nichido Fire Insurance Programming Contest 2020 C.Lamps
題目鏈接
對一次操作,用差分很容易解決~
題目的難點在於要想到 在一個小值附近數組就會全部變成 (PS:這個也可以通過打表發現),其實就是考驗你敢不敢下手去寫😂
AC代碼如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
main(){
int n,k;
cin>>n>>k;
int a[n];
for(int i=0;i<n;i++) cin>>a[i];
while(k--){
int b[n]={0},m=2*n;
for(int i=0;i<n;i++){
m=min(m,a[i]);
b[max(0,i-a[i])]++;
if(i+a[i]+1<n) b[i+a[i]+1]--;
}
if(m>=n) break;
for(int i=0;i<n-1;i++) b[i+1]+=b[i];
memcpy(a,b,sizeof(b));
}
for(int i=0;i<n;i++) cout<<a[i]<<" ";
}