Submission #1250746

#TimeUsernameProblemLanguageResultExecution timeMemory
1250746MKopchev선물 (IOI25_souvenirs)C++20
25 / 100
12 ms412 KiB
#include "souvenirs.h" #include <utility> #include <vector> #include <iostream> const int nmax=1e2+42; long long known[nmax]; int seen[nmax]; std::vector< std::pair< std::vector<int>, long long> > known_sums; void add_line(long long M) { std::pair< std::vector<int>, long long> outp=transaction(M); outp.second=M-outp.second; for(auto pos:outp.first) seen[pos]++; known_sums.push_back(outp); bool change=1; while(change) { change=0; std::vector< std::pair< std::vector<int>, long long> > new_known_sums={}; for(auto line:known_sums) { long long new_sum=line.second; std::vector<int> new_positions={}; for(auto pos:line.first) if(known[pos])new_sum-=known[pos]; else new_positions.push_back(pos); if(new_positions.size()!=line.first.size())change=1; if(new_positions.size()==0)continue; if(new_positions.size()==1) { known[new_positions[0]]=new_sum; } else { new_known_sums.push_back({new_positions,new_sum}); } } known_sums=new_known_sums; } } int get_last_non_suffix(int N) { int pos=N-1; while(known[pos])pos--; while(known[pos]==0)pos--; return pos; } void buy_souvenirs(int N, long long P0) { known[0]=P0; for(int i=1;i<N;i++) { int pos=get_last_non_suffix(N); if(known_sums.size()==0||known_sums.back().first[0]<pos) { add_line(known[pos]-1); } else { add_line(known_sums.back().second/known_sums.back().first.size()); } } for(int i=0;i<N;i++) while(seen[i]<i) { add_line(known[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...