Submission #1168355

#TimeUsernameProblemLanguageResultExecution timeMemory
116835512345678Painting Squares (IOI20_squares)C++20
100 / 100
27 ms412 KiB
#include "squares.h"
#include <bits/stdc++.h>

using namespace std;

const int k=10;

int t, vs[(1<<k)], init=0, dp[(1<<k)];
vector<int> v;

std::vector<int> paint(int n) {
	if (!init)
	{
		init=1;
		for (int i=0; i<k; i++) v.push_back(0);
		vs[0]=1;
		int lst=0;
		dp[lst]=0;
		for (int i=k; i<(1<<k); i++)
		{
			lst-=v[v.size()-k]*(1<<(k-1));
			lst=lst*2;
			if (!vs[lst+1]) lst++, dp[lst]=i-k+1, v.push_back(1), vs[lst]=1;
			else v.push_back(0), dp[lst]=i-k+1, vs[lst]=1;
		}
	}
	vector<int> res=v;
	while (res.size()>n) res.pop_back();
	res.push_back(k);
	return res;
}

int find_location(int n, std::vector<int> c) {
	if (!init)
	{
		init=1;
		for (int i=0; i<k; i++) v.push_back(0);
		vs[0]=1;
		int lst=0;
		dp[lst]=0;
		for (int i=k; i<(1<<k); i++)
		{
			lst-=v[v.size()-k]*(1<<(k-1));
			lst=lst*2;
			if (!vs[lst+1]) lst++, dp[lst]=i-k+1, v.push_back(1), vs[lst]=1;
			else v.push_back(0), dp[lst]=i-k+1, vs[lst]=1;
			//cout<<"debug "<<lst<<' '<<dp[lst]<<'\n';
		}
	}
	int cnt=0;
	for (auto x:c) if (x==-1) cnt++;
	if (cnt) return n-k+cnt; 
	for (int i=0; i<k; i++) cnt*=2, cnt+=c[i];
	return dp[cnt];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...