boxmoe_header_banner_img

Hello! 欢迎DRheEheAM的blog!

加载中

文章导读

Oct. 7th 补题


avatar
DRheEheAM_Gary 2025-10-07 224

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)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码
DRheEheAM_Gary Blog