Submission #1285768

#TimeUsernameProblemLanguageResultExecution timeMemory
1285768eri16선물 (IOI25_souvenirs)C++20
100 / 100
13 ms404 KiB
#include <bits/stdc++.h> #include "souvenirs.h" using namespace std; long long n; long long cnt[101]; long long cost[101]; void Solve(long long money){ pair<vector<int>, long long> vp1; vp1= transaction(money); for (int i=0; i<vp1.first.size(); i++){ cnt[vp1.first[i]]++; } while(vp1.first.size()>1){ if(cost[vp1.first.back()]!=-1){ vp1.second+=cost[vp1.first.back()]; vp1.first.pop_back(); } else{ Solve((money-vp1.second)/vp1.first.size()); } } cost[vp1.first[0]]=money-vp1.second; if(vp1.first[0]!=n-1 && cost[vp1.first[0]+1]==-1){ Solve(cost[vp1.first[0]]-1); } } pair<vector<int>, long long> transaction(long long M); void buy_souvenirs(int N, long long P0) { n=N; pair<vector<int>, long long> vp; if (n==2){ transaction(P0-1); } else if (n==3){ vp=transaction(P0-1); if (vp.first.size()==1){ long long tt=vp.second; long long p2=P0-1-tt; transaction(p2-1); transaction(p2-1); } else{ long long tt=vp.second; long long p2=(P0-1-tt)/2; transaction(p2); } } /* else{ long long sm=n-2; for (int i=1; i<n; i++){ long long cnt=i-1; if (i==n-1){ cnt=sm; } vp=transaction(P0-1); long long tt=vp.second; if (vp.first.size()==2){sm--;tt++;} long long pk=P0-1-tt; P0=pk; for (int j=0; j<cnt; j++){ transaction(pk); } } } */ else{ memset(cnt,0,sizeof(cnt)); memset(cost,-1,sizeof(cost)); cost[0]=P0; Solve(P0-1); for(int i=1; i<n; i++){ for(int j=i; j>cnt[i]; j--){ transaction(cost[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...