Submission #248678

#TimeUsernameProblemLanguageResultExecution timeMemory
248678kshitij_sodaniCop and Robber (BOI14_coprobber)C++14
100 / 100
1085 ms30084 KiB
#include <bits/stdc++.h>
using namespace std;
typedef int64_t llo;
#define mp make_pair
#define pb push_back
#define a first 
#define b second
//#include "coprobber.h"

#define MAX_N 500

//#include "coprobber.h"
vector<int> adj[500*500*2];
vector<int> adj2[500*500*2];
int vis[500*500*2];
int back[500*500*2];

int co[500*500*2];
//i*j+n*n*k,k=0 if police,i police turn,j robber
int cur=0;
int n;
int start(int nn, bool aa[MAX_N][MAX_N]){
	n=nn;

	/*for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			adj[i*n+j].pb(n*n+i*n+j);
			adj2[n*n+i*n+j].pb(i*n+j);
			for(int k=0;k<n;k++){
				if(aa[i][k]){
					adj[i*n+j].pb(k*n+j+n*n);
					adj2[k*n+j+n*n].pb(i*n+j);
				}
			}
		}
	}*/
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){			
			for(int k=0;k<n;k++){
				if(aa[j][k]){
					co[i*n+j+n*n]+=1;
					/*adj[i*n+j+n*n].pb(i*n+k);
					adj2[i*n+k].pb(i*n+j+n*n);*/
				}
			}
		}
	}
	queue<int> ss;
	for(int i=0;i<n;i++){
		vis[i*n+i]=1;
		ss.push(i*n+i);
		vis[n*n+i*n+i]=1;
		ss.push(n*n+i*n+i);
	}
	while(ss.size()){
		int no=ss.front();
		ss.pop();
		if(no<n*n){
			int i=no/n;
			int j=no%n;
			for(int k=0;k<n;k++){
				if(aa[j][k]){
					if(vis[i*n+k+n*n]==0){
						co[i*n+k+n*n]-=1;
						if(co[i*n+k+n*n]==0){
							vis[i*n+k+n*n]=1;
							ss.push(i*n+k+n*n);
						}
					}
				}
			}
		}
		else{
			int i=no/n-n;
			int j=no%n;
			for(int k=0;k<n;k++){
				if(aa[i][k]){
					if(vis[k*n+j]==0){
						vis[k*n+j]=1;
						ss.push(k*n+j);
						back[k*n+j]=no;
					}
				}
			}
			int kk=no-n*n;
			if(vis[kk]==0){
				vis[kk]=1;
				back[kk]=no;
				ss.push(kk);
			}

		}
	}



	for(int i=0;i<n;i++){
		int st=1;
		for(int j=0;j<n;j++){
			if(vis[i*n+j]==0){
				st=0;
			}
		}
		if(st){
			cur=i;
		//	cout<<i<<endl;
			return i;
		}
	}
	return -1;
}

int nextMove(int rr){
//	cout<<back[cur*n+rr]<<endl;
	cur=back[cur*n+rr]/n-n;

    return cur;
}

/*
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);


	return 0;
}*/

/*
g++  -o aa -O2 aa.cpp grader.cpp -std=c++14
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...