Submission #123930

#TimeUsernameProblemLanguageResultExecution timeMemory
123930MoNsTeR_CuBePaint By Numbers (IOI16_paint)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#include "paint.h"
#include <cstdlib>
using namespace std;

#define int long long 

int n, k;
vector< int > c;

vector< vector< int > > memo;

//ONLY works with empty cells

vector< vector< int > > tot;
vector< vector< int > > timee;

int dp(int posArray, int posC){
	///////////////////////////
	if(posArray >= n){
		if(posC < k) return 0;
		else{
			return 1;
		}
	}
	if(posC >= k) return 1;
	///////////////////////////
	if(memo[posArray][posC] != -1){
		if(timee[posArray][posC])timee[posArray][posC]++;
		return memo[posArray][posC];
	} 
	///////////////////////////
	memo[posArray][posC] = 0;
	tot[posArray][posC] = 0;
	if(posArray + c[posC] - 1 < n){
		timee[posArray][posC]++;
		memo[posArray][posC] += dp(posArray + c[posC] + 1, posC+1);
		tot[posArray][posC] = memo[posArray][posC];
	}
	memo[posArray][posC] += dp(posArray+1, posC);
	return memo[posArray][posC];
	///////////////////////////
}

vector< int > ans;

vector< vector< bool > > visited;

void rec(int posArray, int posC){
	if(posArray >= n){
		return ;
	}
	if(posC >= k) return;
	//if(visited[posArray][posC]) return ;
	
	if(posArray + c[posC]-1 < n ){
		//cout << "AT " << posArray << ' ' << posC << ' ' << "Add " << tot[posArray][posC] << ' ' << "From " << posArray << ' ' << "TO " << posArray+c[posC]-1 << ' ' << "TIME " << timee[posArray][posC] << endl;
		ans[posArray] += tot[posArray][posC];
		ans[posArray+c[posC]]-=tot[posArray][posC];
	}
	rec(posArray + c[posC] + 1, posC+1);
	rec(posArray+1, posC);
	
	visited[posArray][posC] = true;
}

string solve_puzzle(string s, vector<int> C){
	n = s.size();
	k = C.size();

	c.resize(k);
	memo.assign(n, vector< int> (k,-1));
	
	c = C;
	tot.assign(n, vector< int> (k,-1));
	timee.assign(n, vector< int> (k,0));
	dp(0,0);
	
	ans.assign(n+1,0);
	visited.assign(n+1, vector< bool > (k,false));
	
	rec(0,0);
	
	string rep = "";
	
	for(int i = 1; i < n; i++){
		ans[i] += ans[i-1];
	}
	
	for(int i = 0; i < n; i++){
		if(ans[i] == dp(0,0)) rep += 'X';
		else if(ans[i]) rep += '?';
		else rep += '_';
	}
	
	return rep;
}
/*
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	cin >> n >> k;
	
	c.resize(k);
	memo.assign(n, vector< int> (k,-1));
	
	for(int i = 0; i < k; i++){
		cin >> c[i];
	}
	
	string s = "";;
	for(int i = 0; i < n; i++) s += '.';
	
	cout << solve_puzzle(s,c) << endl;
}
*/

Compilation message (stderr)

/tmp/ccpTlhUR.o: In function `main':
grader.cpp:(.text.startup+0x1eb): undefined reference to `solve_puzzle(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status