Submission #1262512

#TimeUsernameProblemLanguageResultExecution timeMemory
1262512abdelhakimSouvenirs (IOI25_souvenirs)C++20
100 / 100
12 ms420 KiB
#include "souvenirs.h" #include <bits/stdc++.h> #define ll long long #define dbg(x) cerr<<#x << ' ' << x << endl; using namespace std; ll n; vector<ll> value; vector<ll> cnt; void printvec(vector<ll>& v) { for (auto &&e : v) { cout << e << ' ' ; } cout << endl; } void gad(vector<int>& v) { for (auto &&e : v) { cnt[e]++; } } void buy_souvenirs(int N, long long P0) { // std::pair<std::vector<int>, long long> res = transaction(3); n=N; value.resize(n); cnt.resize(n); value[0]=P0; map<ll,pair<ll,vector<int>>> mp; pair<vector<int>,ll> res1 = transaction(P0-1); gad(res1.first); mp[1]={P0-1-res1.second,res1.first}; if(res1.first.size()==1) { value[1]=P0-1-res1.second; } for (int i=n-1;i>=1;i--) { if(value[i]==0) { ll val=0; for (int j=i;j>=0;j--) { if(mp[j].first!=0) { vector<ll> v; ll sm=mp[j].first; for (auto &&e : mp[j].second) { if(e>i)sm-=value[e]; else { v.push_back(e); } } val=sm/v.size(); if(v.size()==1) { val=sm-1; value[v[0]]=sm; } break; } } while(value[i]==0) { pair<vector<int>,ll> res = transaction(val); vector<int> v; ll sm=val-res.second; for (auto &&e : res.first) { if(e>i)sm-=value[e]; else { v.push_back(e); } } mp[v[0]]={sm,v}; if(v.size()==1) { value[v[0]]=sm; } gad(res.first); val=sm/v.size(); if(v.size()==1) { val=sm-1; } } } } for (int i=1;i<n;i++) { while(cnt[i]<i) { pair<vector<int>,ll> res = transaction(value[i]); cnt[i]++; } } return; }
#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...