QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#740355 | #9156. 百万富翁 | Sai_tqwq | 100 ✓ | 5392ms | 147512kb | C++14 | 1.5kb | 2024-11-13 09:19:22 | 2024-11-13 09:19:23 |
Judging History
answer
#include<bits/stdc++.h>
#include "richest.h"
using namespace std;
#define endl '\n'
const int cut[]={500000, 250000, 125000, 62500, 20832, 3472, 183, 1};
map<pair<int,int>,int> id;
int richest(int n,int t,int s){
id.clear();
if(n==1000){
vector<int> a,b;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
a.push_back(i),b.push_back(j),id[{i,j}]=(int)a.size()-1;
auto p=ask(a,b);
for(int i=0;i<n;i++){
bool fl=1;
for(int j=0;j<n;j++)if(i!=j&&p[id[{min(i,j),max(i,j)}]]!=i){
fl=0;
break;
}
if(fl)return i;
}
}
vector<int> cur;
for(int i=0;i<n;i++)cur.push_back(i);
for(int p=0;p<8;p++){
vector<int> a,b,tmp;
int s=(int)cur.size()/cut[p],bmod=(int)cur.size()%cut[p],amod=cut[p]-bmod;
int top=0;
for(int i=0;i<amod;i++){
for(int j=top;j<top+s;j++)
for(int k=j+1;k<top+s;k++)
a.push_back(cur[j]),b.push_back(cur[k]),id[{cur[j],cur[k]}]=(int)a.size()-1;
top+=s;
}
for(int i=0;i<bmod;i++){
for(int j=top;j<=top+s;j++)
for(int k=j+1;k<=top+s;k++)
a.push_back(cur[j]),b.push_back(cur[k]),id[{cur[j],cur[k]}]=(int)a.size()-1;
top+=s+1;
}
auto c=ask(a,b);top=0;
for(int i=0;i<amod;i++){
int sp=top;
for(int j=top+1;j<top+s;j++)
if(c[id[{cur[sp],cur[j]}]]==cur[j])sp=j;
tmp.push_back(cur[sp]);
top+=s;
}
for(int i=0;i<bmod;i++){
int sp=top;
for(int j=top+1;j<=top+s;j++)
if(c[id[{cur[sp],cur[j]}]]==cur[j])sp=j;
tmp.push_back(cur[sp]);
top+=s+1;
}
cur=tmp;
}
return cur[0];
}
詳細信息
Pretests
Pretest #1:
score: 15
Accepted
time: 1644ms
memory: 52248kb
input:
1000 1 499500 957319859
output:
Correct 7127326332295218295 1.000000 1331569654267968081
result:
points 1.0 Correct
Pretest #2:
score: 85
Accepted
time: 5367ms
memory: 147484kb
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: 1659ms
memory: 52492kb
input:
1000 1 499500 957319857
output:
Correct 7127326332295218295 1.000000 1331569654267968081
result:
points 1.0 Correct
Test #2:
score: 85
Accepted
time: 5392ms
memory: 147512kb
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