제출 #1163169

#제출 시각아이디문제언어결과실행 시간메모리
1163169WH8Rainy Markets (CCO22_day1problem2)C++20
0 / 25
546 ms47408 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 g0(x) get<0>(x) #define g1(x) get<1>(x) #define g2(x) get<2>(x) #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; } } 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; } int ans=0; for(int i=0;i<n-1;i++){ ans+=up[i]; } cout<<"YES\n"; cout<<ans<<endl; vector<tuple<int,int,int>> out; for(int i=n-2;i>=0;i--){ out.pb({op[i]-up[i]-sp[i+1], up[i],sp[i+1]}); sp[i]-=op[i]-up[i]-sp[i+1]; assert(sp[i] >= 0 && sp[i+1] >= 0 && up[i] >= 0); } reverse(out.begin(),out.end()); for(auto it:out){ cout<<g0(it)<<" "<<g1(it)<<" "<<g2(it)<<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...