Submission #1296414

#TimeUsernameProblemLanguageResultExecution timeMemory
1296414PieArmyHow to Avoid Disqualification in 75 Easy Steps (CEOI23_avoid)C++20
25 / 100
2 ms440 KiB
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)
#include"avoid.h"

//send(vector<int>)
//vector<int>wait()

int n=1000;

pair<int,int> scout(int R,int H){
	if(R==10){
		vector<int>v[10];
		for(int i=1;i<=n;i++){
			for(int j=0;j<10;j++){
				if((i>>j)&1)v[j].pb(i);
			}
		}
		for(int i=0;i<10;i++){
			send(v[i]);
		}
		vector<int>res=wait();
		int cev=0;
		for(int i=0;i<10;i++){
			if(res[i])cev+=(1<<i);
		}
		return {cev,cev};
	}
	else if(R==20){
		pair<int,int>p;
		int l=1,r=1000;
		while(l<r){
			int mi=(l+r)/2;
			vector<int>v;
			for(int i=1;i<=mi;i++){
				v.pb(i);
			}
			send(v);
			if(wait()[0])r=mi;
			else l=mi+1;
		}
		p.fr=l;
		l=1;r=1000;
		while(l<r){
			int mi=(l+r+1)/2;
			vector<int>v;
			for(int i=mi;i<=n;i++){
				v.pb(i);
			}
			send(v);
			if(wait()[0])l=mi;
			else r=mi-1;
		}
		p.sc=l;
		return p;
	}
	else if(R==30){
		vector<int>v[10];
		for(int i=1;i<=n;i++){
			for(int j=0;j<10;j++){
				if((i>>j)&1)v[j].pb(i);
			}
		}
		for(int i=0;i<10;i++){
			send(v[i]);
			v[i].clear();
		}
		for(int i=1;i<=n;i++){
			for(int j=0;j<10;j++){
				if(!((i>>j)&1))v[j].pb(i);
			}
		}
		for(int i=0;i<10;i++){
			send(v[i]);
			v[i].clear();
		}
		vector<int>res=wait();
		int mask=0;
		for(int i=0;i<20;i++){
			if(i<10){
				if(res[i])mask+=(1<<i);
			}
			else if(res[i]==0){
				if(mask&(1<<(i-10))){
					mask-=(1<<(i-10));
				}
			}
		}
		if(mask==0){
			int cev=0;
			for(int i=0;i<10;i++){
				if(res[i])cev+=(1<<i);
			}
			return {cev,cev};
		}
		vector<int>can;
		for(int i=1;i<=n;i++){
			if(i<(i^mask)){
				can.pb(i);
			}
		}
		for(int i=0;i<can.size();i++){
			for(int j=0;j<10;j++){
				if((i>>j)&1)v[j].pb(can[i]);
			}
		}
		for(int i=0;i<10;i++){
			send(v[i]);
			v[i].clear();
		}
		res=wait();
		int tar=0;
		for(int i=0;i<10;i++){
			if(res[i])tar+=(1<<i);
		}
		return {can[tar],can[tar]^mask};
	}
}

Compilation message (stderr)

avoid.cpp: In function 'std::pair<int, int> scout(int, int)':
avoid.cpp:123:1: warning: control reaches end of non-void function [-Wreturn-type]
  123 | }
      | ^
#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...