QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#492303#9156. 百万富翁zeq2021#46.00001 2333ms98984kbC++143.7kb2024-07-26 11:20:342024-07-26 11:20:36

Judging History

你现在查看的是最新测评结果

  • [2024-07-26 11:20:36]
  • 评测
  • 测评结果:46.00001
  • 用时:2333ms
  • 内存:98984kb
  • [2024-07-26 11:20:34]
  • 提交

answer

/*
*            /$$           /$$
*           |__/          |__/
*  /$$$$$$$$ /$$ /$$$$$$$$ /$$  /$$$$$$
* |____ /$$/| $$|____ /$$/| $$ /$$__  $$
*    /$$$$/ | $$   /$$$$/ | $$| $$  \ $$
*   /$$__/  | $$  /$$__/  | $$| $$  | $$
*  /$$$$$$$$| $$ /$$$$$$$$| $$|  $$$$$$$
* |________/|__/|________/|__/ \____  $$
*                                   | $$
*                                   | $$
*                                   |__/
*/
//hj23308保佑我
//Missile保佑我
/*
* 醒了在梦里挣扎,不觉黯淡了朝霞
*/
/*
* 我很高兴你没有忘了我,但是我现在更希望你已经忘了我了。
* 希望在你的记忆中,我只是尘土一撮,从你的全世界路过,然后四散飞扬不留下一点痕迹,而你要不回头的往前走。
* 我更希望我只是从你的全世界路过,只是路过
*/
/*
* 只是我在十字路口守了太久,守到黄沙如雨掩埋一切痕迹,才发现自己等的人已经离开了。
*/
/*
* 听我的 别回头 回头就可能会泪流满面,会被黄沙掩埋,所以即使痛苦也要向前走
*/
/*
* 我听到了「天行健」的回响,这是一个伟大斗士的不息自强;
* 我听到了「破万法」的回响,这是一个黑道打手的守护欲望;
* 我看见了「生生不息」的激荡,这是一个骗子的伟大乐章!
*/
/*
* 我用虚假的面具照顾着细腻的感情;
* 我以华丽的衣物下藏着腐烂的血肉;
* 当我摘下面具,褪去衣物,即便是我最亲近的人,也无法直视我
*/
#include "richest.h"
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+5;
bool bj[MAXN];
int num[MAXN],K,L[MAXN],R[MAXN],P[MAXN];
//std::vector<int> ask(std::vector<int> a, std::vector<int> b) {
//	vector<int>c;
//	for(int i=0;i<a.size();i++) {
//		c.emplace_back(max(a[i],b[i]));
//	}
//	return c;
//}
int richest(int N, int T, int S)
{
	if(N==1000&&T==1) {
		for(int i=0;i<N;i++) num[i]=0;
		vector<int>a,b,c;
		a.clear(),b.clear(),c.clear();
		for(int i=0;i<N;i++) {
			for(int j=i+1;j<N;j++) {
				a.emplace_back(i),b.emplace_back(j);
			}		
		}
		c=ask(a,b);
		for(auto v:c) {
			num[v]++;
		}
		for(int i=0;i<N;i++) {
			if(num[i]==N-1) return i;
		}
	}
	for(int i=0;i<N;i++) bj[i]=false;
	vector<int>q,a,b,c;
	for(int i=0;i<N;i++) {
		q.emplace_back(i);
	}
	int t=0,s=0,sum=0;
	while(sum<=7) {
		sum++;
		a.clear(),b.clear();
		t++;
		for(int i=0;i<q.size();i+=2) {
			if(i+1<q.size()) {
				a.emplace_back(q[i]);
				b.emplace_back(q[i+1]);
			}
		}
		s+=a.size();
		c=ask(a,b);
		int site=0;
		for(int i=0;i<q.size();i+=2) {
			if(i+1>=q.size()) break;
			if(c[site]==q[i]) {
				bj[q[i+1]]=true;
			}
			else bj[q[i]]=true;
			site++;
		}
		q.clear();
		for(int i=0;i<N;i++) {
			if(!bj[i]) q.emplace_back(i);
		}
	}
	K=sqrt(q.size());
	for(int i=1;i<=K;i++) {
		L[i]=(i-1)*K,R[i]=i*K-1;
	}
	R[K]=q.size()-1;
	a.clear(),b.clear();
	for(int i=1;i<=K;i++) {
		for(int j=L[i];j<=R[i];j++) {
			for(int k=j+1;k<=R[i];k++) {
				a.emplace_back(q[j]);
				b.emplace_back(q[k]);
			}
		}
	}
	c=ask(a,b);
	for(int i=0;i<N;i++) num[i]=0;
	for(auto v:c) {
		num[v]++;
	}
	for(int i=1;i<=K;i++) {
		int Len=R[i]-L[i]+1;
		for(int j=L[i];j<=R[i];j++) {
			if(num[q[j]]==Len-1) {
				P[i]=j;
			}
		}
	}
	a.clear(),b.clear();
	for(int i=1;i<=K;i++) {
		for(int j=i+1;j<=K;j++) {
			a.emplace_back(q[P[i]]);
			b.emplace_back(q[P[j]]);
		}
	}
	c=ask(a,b);
	for(int i=0;i<N;i++) num[i]=0;
	for(auto v:c) {
		num[v]++;
	}
	for(int i=1;i<=K;i++) {
		if(num[q[P[i]]]==K-1) return q[P[i]];
	}
}
//int main() {
//	cout<<richest(1000000,20,20000000)<<"\n";
//}

Details

Tip: Click on the bar to expand more detailed information

Pretests

Pretest #1:

score: 15
Accepted
time: 629ms
memory: 27420kb

input:

1000 1 499500 957319859

output:

Correct
7127326332295218295
1.000000
1331569654267968081

result:

points 1.0 Correct

Pretest #2:

score: 31
Acceptable Answer
time: 2328ms
memory: 98984kb

input:

1000000 20 2000000 29091473

output:

Partially correct Case 2, 31 / 85, maxt = 10, maxs = 1121085
1661632061882032527
0.364706
13514834986773067331

result:

points 0.364706 Partially correct Case 2, 31 / 85, maxt = 10, maxs = 1121085


Final Tests

Test #1:

score: 15
Accepted
time: 637ms
memory: 27348kb

input:

1000 1 499500 957319857

output:

Correct
7127326332295218295
1.000000
1331569654267968081

result:

points 1.0 Correct

Test #2:

score: 31
Acceptable Answer
time: 2333ms
memory: 98956kb

input:

1000000 20 2000000 29091471

output:

Partially correct Case 2, 31 / 85, maxt = 10, maxs = 1121085
1661632061882032527
0.364706
13514834986773067331

result:

points 0.364706 Partially correct Case 2, 31 / 85, maxt = 10, maxs = 1121085