Submission #1378847

#TimeUsernameProblemLanguageResultExecution timeMemory
1378847PieArmyVoltage 2 (JOI26_voltage)C++20
100 / 100
89 ms1004 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 "voltage.h"
mt19937 rng(chrono::high_resolution_clock().now().time_since_epoch().count());

int rint(int a,int b){
	int ans=0;
	ans=a+(rng()%(b-a+1));
	return ans;
}

int n,m;
vector<int>komsu[523],ters[523];

bool f(int x,int l,int r){
	vector<int>v1(n,0),v2(n,0);
	for(int i=l;i<=r;i++){
		v1[i]=v2[i]=1;
	}
	v1[x]=0;
	v2[x]=1;
	for(int y:komsu[x]){
		v1[y]=v2[y]=1;
	}
	for(int y:ters[x]){
		v1[y]=v2[y]=0;
	}
	return query(v1,v2)==-1;
}

void dfs(int pos){
	int las=-1;
	while(las<n){
		int l=las+1,r=n;
		while(l<r){
			int mi=(l+r)/2;
			if(f(pos,las+1,mi))r=mi;
			else l=mi+1;
		}
		if(l!=n&&f(pos,l,l)){
			ters[pos].pb(l);
			komsu[l].pb(pos);
			dfs(l);
			answer(l,pos);
			m--;
		}
		else if(l!=n)break;
		las=l;
	}
}

bool solve(int N, int M){
	n=N;
	m=M;
	for(int i=0;i<n;i++){
		vector<int>v1(n,0),v2(n,0);
		v1[i]=1;
		if(query(v1,v2))continue;
		dfs(i);
	}
	return !m;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...