Submission #416097

#TimeUsernameProblemLanguageResultExecution timeMemory
416097dreezyTropical Garden (IOI11_garden)C++17
69 / 100
5082 ms39600 KiB
#include <bits/stdc++.h>
#include "garden.h"
#include "gardenlib.h"
using namespace std;


/*****************************************/

//just have to implement
#define pi pair<int,int>
#define pb push_back
#define ll long long
#define f first
#define s second

const int maxn = 3e5 + 5;
const int logn = 31;
//int level[maxn];
int up[maxn][logn];


int jump(int n, int k){
	
	for(int lvl = 0; lvl< logn; lvl++){
		if( ( 1<< lvl) & k)
			n = up[n][lvl];
	}
	
	return n;
	
}





void count_routes(int N, int M, int P, int R[][2], int Q, int G[])
{

	memset(up, -1, sizeof(up));
	for(int i =0; i<M; i++){

		int a = 2* R[i][0];
		int b = 2* R[i][1];
		
		if(up[a][0] == -1){
			if( up[b][0] == -1){
				up[a][0] = b+1;
				up[a+1][0] = b+1;	
				
			}
			else{
				up[a][0] = b;
				up[a+1][0] = b;	
			}
		}
		else if(up[a][0] == up[a+1][0]){
			if(up[b][0] == -1)
				up[a+1][0] = b+1;
			else
				up[a+1][0] = b;
		}
		
		if(up[b][0] == -1){
			
			if(up[a][0] == b +1){
				up[b][0] = a+1;
				up[b+1][0] = a+1;
				
			}
			else{	
				up[b][0] = a;
				up[b+1][0]= a;
			}
		}
		else if(up[b][0] == up[b+1][0]){
			if(up[a][0] == b)
				up[b+1][0] = a+1;
			else
				up[b+1][0] = a;
		}
	}
	
	
	for(int lvl = 1; lvl< logn; lvl++){
		for(int i = 0; i<2*N; i++){
			up[i][lvl] = up[up[i][lvl-1]][lvl-1];
		}
	}
	
	/*
	for(int i =0; i< N; i++){
		int a = up[i*2][0];
		int b= up[i*2 +1][0];
		
		if(a % 2== 1){
			cout << i  <<" -> "<<a/2<<"'\n";
		}
		else{
			cout << i  <<" -> "<<a/2<<"\n";
		}
		
		if(b % 2== 1){
			cout << i  <<"' -> "<<b/2<<"'\n";
		}
		else{
			cout << i  <<"' -> "<<b/2<<"\n";
		}
	}
	
	for(int i =1;i<=5; i++){
		int res = jump(0, i);
		if(res % 2 == 1)
			cout << "0 + "<<i<<"  -> "<<res/2<<"'\n";
		else
			cout << "0 + "<<i<<"  -> "<<res/2<<"\n";
	
	}
	
	*/
	
	
	for(int i =0; i<Q; i++){
		ll ans = 0;
		
		for(int j =0; j<N; j++){
			ans+=(jump(j*2,G[i]) /2) == P;
		}
		answer(ans);  
	}

   
}
/******************************************/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...