P14179 「FAOI-R8」喵了个喵 V
最后按照题解思路写完了
注意极端/边界情况!!!
#include<bits/stdc++.h>
using namespace std;
#define intc const int
#define int long long
#define Cios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
intc N=1e6+10;
int n,d,m,bu[N];
int b[N];
signed main(){
int T;
cin>>T;
while (T--) {
cin>>n>>d>>m;
for (int i=1;i<=n;i++) cin>>b[i];
int lst1=-1,lst2=-1;
bu[0]=0;
b[0]=1;
for (int i=1;i<=n;i++) {
if (b[i]) {
if (bu[i-1]
else bu[i]=bu[i-1]/d*d+d;
}
else {
if (bu[i-1]
else bu[i]=bu[i-1];
}
if(b[i]==0){
lst2=lst1;
lst1=i;
}
}
int sum=0;
for(int i=1;i<=n;i++) sum+=bu[i];
int res=m-sum;
if(res<0){
cout<<"No\n";
continue;
}
if(res==0){
for(int i=1;i<=n;i++) cout<<bu[i]<<" ";
cout<<endl;
continue;
}
if(d==2){
if(res
cout<<"No\n";
}
else{
bu[n]+=res;
for(int i=1;i<=n;i++) cout<<bu[i]<<" ";
cout<<endl;
}
continue;
}
bu[n]+=res/d*d;
res
bool flag=1;
if(res==0){
for(int i=1;i<=n;i++) cout<<bu[i]<<" ";
cout<<endl;
continue;
}
else if(res>0&&res<d-1){
if(lst1!=-1) bu[lst1]+=res;
else flag=0;
}
else{
if(lst1!=-1&&lst2!=-1){
bu[lst1]+=res-1;
bu[lst2]+=1;
}
else flag=0;
}
if(flag){
for(int i=1;i<=n;i++) cout<<bu[i]<<" ";
cout<<endl;
}
else cout<<"No\n";
for(int i=1;i<=n;i++) b[i]=bu[i]=0;
}
return 0;
}
评论(0)
暂无评论