Submission #1163160

#TimeUsernameProblemLanguageResultExecution timeMemory
1163160WH8Rainy Markets (CCO22_day1problem2)C++20
0 / 25
561 ms47412 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

#define pb push_back
#define int long long 
#define f first
#define s second
#define pll pair<long long, long long>

signed main(){
	int n;cin>>n;
	vector<int> sc(n,0), p(n-1,0), op(n-1,0), uc(n-1, 0), sp(n, 0), up(n-1, 0);
	for(int i=0;i<n;i++)cin>>sc[i];
	for(int i=0;i<n-1;i++){ 
		cin>>p[i];
		op[i]=p[i];
	}
	for(int i=0;i<n-1;i++)cin>>uc[i];
	for(int i=0;i<n-1;i++){
		int l=min(sc[i]-sp[i],p[i]);
		sp[i]+=l;
		p[i]-=l;
		int m=min(uc[i]-up[i],p[i]);
		up[i]+=m;
		p[i]-=m;
		int r=min(sc[i+1]-sp[i+1],p[i]);
		sp[i+1]+=r;
		p[i]-=r;
		if(p[i]>0){
			cout<<"NO";
			return 0;
		}
		assert(sp[i] >= 0 && sp[i+1] >= 0 && up[i] >= 0);
	}
	for(int i=n-2;i>=0;i--){
		int m=min(sc[i+1]-sp[i+1], up[i]);
		sp[i+1]+=m;
		up[i]-=m;
		int l=min(sc[i+1]-sp[i+1], sp[i]);
		sp[i+1]+=l;
		sp[i]-=l;
		assert(sp[i] >= 0 && sp[i+1] >= 0 && up[i] >= 0);
	}
	int ans=0;
	for(int i=0;i<n-1;i++){
		ans+=up[i];
	}
	cout<<"YES\n";
	cout<<ans<<endl;
	for(int i=0;i<n-1;i++){
		cout<<sp[i]<<" "<<up[i]<<" "<<op[i]-(up[i]+sp[i])<<endl;
		sp[i+1]-=op[i]-(up[i]+sp[i]);
		assert(sp[i] >= 0 && sp[i+1] >= 0 && up[i] >= 0);

	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...