QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#560977 | #9156. 百万富翁 | oyzr | 100 ✓ | 2485ms | 101628kb | C++23 | 1.7kb | 2024-09-12 19:16:19 | 2024-09-12 19:16:19 |
Judging History
answer
#include <bits/stdc++.h>
#include "richest.h"
using namespace std;
const int MAXN = 1e6 + 5;
// std::vector<int> ask(std::vector<int> a, std::vector<int> b);
int sol[8] = {500000, 250000, 125000, 62500, 20833, 3472, 183, 1};
int cnt[MAXN];
vector <int> a, b, res;
vector <int> v;
void Ask(int l, int r){
for (int i = l; i <= r; i++){
for (int j = i + 1; j <= r; j++){
a.push_back(v[i]);
b.push_back(v[j]);
}
}
}
void Solve(){
res.clear();
res = ask(a, b);
a.clear(), b.clear();
for (int i = 0; i < MAXN; i++)
cnt[i] = 0;
for (auto x: res)
cnt[x]++;
}
int Ans(int l, int r){
int len = r - l + 1;
for (int i = l; i <= r; i++)
if (cnt[v[i]] == len - 1)
return v[i];
}
vector <pair <int, int> > now;
int richest(int N, int T, int S){
v.clear();
for (int i = 0; i < N; i++)
v.push_back(i);
if (N == 1000){
Ask(0, 999);
Solve();
return Ans(0, 999);
}else{
int n = N;
for (int i = 0; i < 8; i++){
int num = sol[i];
int cnt1 = num - n % num, len1 = n / num, cnt2 = n % num, len2 = n / num + 1;
now.clear();
for (int i = 1; i <= cnt1; i++)
now.push_back({(i - 1) * len1, i * len1 - 1});
for (int i = 1; i <= cnt2; i++)
now.push_back({cnt1 * len1 + (i - 1) * len2, cnt1 * len1 + i * len2 - 1});
for (auto x: now)
Ask(x.first, x.second);
Solve();
v.clear();
for (auto x: now)
v.push_back(Ans(x.first, x.second));
n = num;
}
return v[0];
}
}
详细
Pretests
Pretest #1:
score: 15
Accepted
time: 620ms
memory: 28224kb
input:
1000 1 499500 957319859
output:
Correct 7127326332295218295 1.000000 1331569654267968081
result:
points 1.0 Correct
Pretest #2:
score: 85
Accepted
time: 2485ms
memory: 101600kb
input:
1000000 20 2000000 29091473
output:
Correct Case 2, 85 / 85, maxt = 8, maxs = 1099944 7610580723948932399 1.000000 1331569654267968081
result:
points 1.0 Correct Case 2, 85 / 85, maxt = 8, maxs = 1099944
Final Tests
Test #1:
score: 15
Accepted
time: 629ms
memory: 28260kb
input:
1000 1 499500 957319857
output:
Correct 7127326332295218295 1.000000 1331569654267968081
result:
points 1.0 Correct
Test #2:
score: 85
Accepted
time: 2372ms
memory: 101628kb
input:
1000000 20 2000000 29091471
output:
Correct Case 2, 85 / 85, maxt = 8, maxs = 1099944 7610580723948932399 1.000000 1331569654267968081
result:
points 1.0 Correct Case 2, 85 / 85, maxt = 8, maxs = 1099944