| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1328591 | zeta314 | 선물 (IOI25_souvenirs) | C++20 | 0 ms | 0 KiB |
#include <iostream>
#include <vector>
#include "souvenirs.h"
using namespace std;
pair<vector<int>, long long> transaction(long long M);
void buy_souvenirs(int n, long long p0){
vector<long long> p(n, -1), b(n, 0);
p[0] = p0;
vector<int> a;
long long r;
long long idx = 1, nxt = p[0] - 1;
while(true){
if(p[idx] == -1){
while(b[idx] < idx){
{a, r} = transaction(nxt);
for(int i = 0; i < a.size(); i++)
b[a[i]]++;
}
if(a.size() == 1)
p[1] = (p[0] - 1 - r);
else{
nxt = (p[idx - 1] - 1 - r) / a.size();
}
} else
while(b[idx] < idx){
transaction(p[idx]);
b[idx]++;
}
idx++;
}
}