Submission #1315143

#TimeUsernameProblemLanguageResultExecution timeMemory
1315143AhmadAlhussain선물 (IOI25_souvenirs)C++20
100 / 100
14 ms336 KiB
#include<bits/stdc++.h> using namespace std; pair<vector<int>,long long> transaction(long long M); const int MAXN=105; long long p[MAXN]; int n; vector<int>k[MAXN]; long long r[MAXN]; long long s[MAXN]; int let[MAXN]; void clean(int c) { while(k[c].size()&&p[k[c].back()]>0) { r[c]+=p[k[c].back()]; k[c].pop_back(); } } long long sm(int c) { long long sum=s[c]-r[c]; return sum/k[c].size(); } void remove(vector<int>v) { for(int i:v) { let[i]--; } } void solve(int a){ clean(a); while(k[a].size()>1) { long long w=sm(a); auto[v,e]=transaction(w); remove(v); k[v[0]]=v; r[v[0]]=e; s[v[0]]=w; solve(v[0]); clean(a); } p[a]=s[a]-r[a]; if(a!=n-1&&p[a+1]==0) { auto[v,e]=transaction(p[a]-1); remove(v); k[v[0]]=v; r[v[0]]=e; s[v[0]]=p[a]-1; solve(a+1); } } void buy_souvenirs(int N,long long p0) { n=N; for(int i=1;i<N;i++) { let[i]=i; } p[0]=p0; auto[v,e]=transaction(p[0]-1); remove(v); k[1]=v; r[1]=e; s[1]=p[0]-1; solve(1); for(int i=2;i<N;i++) { for(int j=0;j<let[i];j++) { transaction(p[i]); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...