Wrong on test #2求调
查看原帖
Wrong on test #2求调
453759
wangyinghao楼主2025/7/26 13:16
#include<iostream>
using namespace std;
#define int long long
int a[200005],pre[200005],nxt[200005];

signed main(){
	ios::sync_with_stdio(0);
	int t,cnt=0;
	cin>>t;
	while(t--){
		cnt++;
		int n,k;
		string s;
		cin>>n>>k>>s;
		for(int i=1;i<=n;i++){
			cin>>a[i];
			if(s[i-1]=='0') a[i]=-1e13;
		}
		int maxx=-1e18;
		for(int i=1;i<=n;i++){
			pre[i]=max(max(pre[i-1]+a[i],a[i]),0ll);
			maxx=max(maxx,pre[i]);
		}
		if(maxx>k){
			cout<<"No\n";
			continue;
		}
		if(maxx==k){
			cout<<"Yes\n";
			for(int i=1;i<=n;i++) cout<<a[i]<<" ";
			cout<<'\n';
			continue;
		}
		for(int i=n;i>=1;i--){
			nxt[i]=max(max(nxt[i+1]+a[i],a[i]),0ll);
		}
		bool flag=0;
		for(int i=1;i<=n;i++){
			if(s[i-1]=='0'){
				a[i]=k-pre[i-1]-nxt[i+1];
				flag=1;
				break;
			}
		}
		if(!flag){
			cout<<"No\n";
			continue;
		}
		cout<<"Yes\n";
		for(int i=1;i<=n;i++){
			cout<<a[i]<<" ";
		}
		cout<<'\n';
	}
	return 0;
}

显示有一组数据按我这样构造求出的最大子区间和不为 k

2025/7/26 13:16
加载中...