# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1163158 | WH8 | Rainy Markets (CCO22_day1problem2) | C++20 | 0 ms | 0 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]);
#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]);
#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);
}
}