Submission #24655

# Submission time Handle Problem Language Result Execution time Memory
24655 2017-06-10T20:25:39 Z bill_kondo ICC (CEOI16_icc) C++14
Compilation error
0 ms 0 KB
#include "icc.h"
#include <bits/stdc++.h>
using namespace std;
 
typedef pair <int, int> pii;
 
const int maxn = 1e2 + 10;
const int maxC = 1e2 + 10;
 
int n;
set <pii> e;
 
int c[maxn];
int d[maxn];
 
void acha ()
{
	for (int a = 1; a <= n; ++a)
		for (int b = a + 1; b <= n; ++b)
			if (e.find (pii (a, b)) == e.end())
			{
				c[0] = {a};
				d[0] = {b};
 
				if (query (1, 1, c, d))
				{
					e.insert (pii (a, b));
					setRoad (a, b);
					return;
				}
			}
}
 
int pointer;
vector <int> adj[maxn];
bool mrk[maxn];
 
int node, E[maxn], p;
 
void combina (int l, int r)
{
	if (l == r)
	{
		node = d[l];
		return;
	}
 
	int mid = (l + r) >> 1;
 
	p = 0;
 
	for (int i = l; i <= mid; ++i)
		E[p++] = d[i];
 
	if (query (1, p, c, E))
		combina (l, mid);
	else
		combina (mid + 1, r);
}
 
void dfs (int v)
{
	mrk[v] = true;
 
	for (auto u: adj[v])
		if (!mrk[u])
			dfs (u);
}
 
void aresta ()
{	
	for (int v = 1; v <= n; ++v)
	{
		c[0] = v;
	
		for (int u = 1; u <= n; ++u)
			mrk[u] = false;
 
		dfs (v);
 
		pointer = 0;
		for (int u = 1; u <= n; ++u)
			if (!mrk[u])
				d[pointer++] = u;
 
		if (query (1, pointer, c, d))
		{
			combina (0, pointer - 1);
			adj[v].push_back (node);
			adj[node].push_back (v);
			setRoad (v, node);
			return;
		}
	}
}

vector <int> C[maxC];

void DFS (int v, int id)
{
	mrk[v] = true;
	C[id].push_back (v);

	for (auto u: adj[v])
		if (!mrk[u])
			DFS (u, id);
}

int pA, A[maxn];
int pB, B[maxn];
int pC, C[maxn];

int I, J;

void combineA (int l, int r)
{
	if (l == r)
	{
		I = l;
		return;
	}

	int mid = (l + r) >> 1;

	pC = 0;
	for (int i = l; i <= mid; ++i)
		C[pC++] = B[i];

	if (query (pA, pC, A, C))
		combineA (l, mid);
	else
		combineA (mid + 1, r);
}

void combineB (int l, int r)
{
	if (l == r)
	{
		J = l;
		return;
	}

	int mid = (l + r) >> 1;

	pC = 0;
	for (int i = l; i <= mid; ++i)
		C[pC++] = A[i];

	if (query (pB, pC, B, C))
		combineB (l, mid);
	else
		combineB (mid + 1, r);
}
 
void solve ()
{
	vector <int> ids;

	for (int v = 1; v <= n; ++v)
	{
		C[i].clear();
		mrk[v] = false;
	}

	int id = 0;
	for (int v = 1; v <= n; ++v)
		if (!mrk[v])
		{
			++id;
			DFS (v, id);
			ids.push_back (id);
		}

	int mid = (id - 1) / 2;

	random_shuffle (ids.begin(), ids.end());

	for (int v = 1; v <= n; ++v)
		mrk[v] = false;

	pA = 0;
	for (int i = 0; i <= mid; ++i)
		for (auto u: C[i])
			A[pA++] = u;

	pB = 0;
	for (int i = mid + 1; i < id; ++i)
		for (auto u: C[i])
			B[pB++] = u;

	combineA (0, pB - 1);
	combineB (0, pA - 1);

	setRoad (A[I], B[J]);

	adj[A[I]].push_back (B[J]);
	adj[B[J]].push_back (A[I]);
}
 
void run (int N)
{
	n = N;
 
	for (int i = 1; i <= n - 1; ++i)
	{
		if (N <= 15) acha ();
		else if (N <= 50) aresta ();
		else if (N <= 100) solve ();
	}
}

Compilation message

icc.cpp:111:15: error: conflicting declaration 'int C [110]'
 int pC, C[maxn];
               ^
icc.cpp:97:14: note: previous declaration as 'std::vector<int> C [110]'
 vector <int> C[maxC];
              ^
icc.cpp: In function 'void combineA(int, int)':
icc.cpp:127:11: error: no match for 'operator=' (operand types are 'std::vector<int>' and 'int')
   C[pC++] = B[i];
           ^
In file included from /usr/include/c++/5/vector:69:0,
                 from /usr/include/c++/5/bits/random.h:34,
                 from /usr/include/c++/5/random:49,
                 from /usr/include/c++/5/bits/stl_algo.h:66,
                 from /usr/include/c++/5/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/5/bits/stdc++.h:64,
                 from icc.cpp:2:
/usr/include/c++/5/bits/vector.tcc:167:5: note: candidate: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = int; _Alloc = std::allocator<int>]
     vector<_Tp, _Alloc>::
     ^
/usr/include/c++/5/bits/vector.tcc:167:5: note:   no known conversion for argument 1 from 'int' to 'const std::vector<int>&'
In file included from /usr/include/c++/5/vector:64:0,
                 from /usr/include/c++/5/bits/random.h:34,
                 from /usr/include/c++/5/random:49,
                 from /usr/include/c++/5/bits/stl_algo.h:66,
                 from /usr/include/c++/5/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/5/bits/stdc++.h:64,
                 from icc.cpp:2:
/usr/include/c++/5/bits/stl_vector.h:448:7: note: candidate: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(std::vector<_Tp, _Alloc>&&) [with _Tp = int; _Alloc = std::allocator<int>]
       operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())
       ^
/usr/include/c++/5/bits/stl_vector.h:448:7: note:   no known conversion for argument 1 from 'int' to 'std::vector<int>&&'
/usr/include/c++/5/bits/stl_vector.h:470:7: note: candidate: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(std::initializer_list<_Tp>) [with _Tp = int; _Alloc = std::allocator<int>]
       operator=(initializer_list<value_type> __l)
       ^
/usr/include/c++/5/bits/stl_vector.h:470:7: note:   no known conversion for argument 1 from 'int' to 'std::initializer_list<int>'
icc.cpp:129:25: error: cannot convert 'std::vector<int>*' to 'int*' for argument '4' to 'int query(int, int, int*, int*)'
  if (query (pA, pC, A, C))
                         ^
icc.cpp: In function 'void combineB(int, int)':
icc.cpp:147:11: error: no match for 'operator=' (operand types are 'std::vector<int>' and 'int')
   C[pC++] = A[i];
           ^
In file included from /usr/include/c++/5/vector:69:0,
                 from /usr/include/c++/5/bits/random.h:34,
                 from /usr/include/c++/5/random:49,
                 from /usr/include/c++/5/bits/stl_algo.h:66,
                 from /usr/include/c++/5/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/5/bits/stdc++.h:64,
                 from icc.cpp:2:
/usr/include/c++/5/bits/vector.tcc:167:5: note: candidate: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = int; _Alloc = std::allocator<int>]
     vector<_Tp, _Alloc>::
     ^
/usr/include/c++/5/bits/vector.tcc:167:5: note:   no known conversion for argument 1 from 'int' to 'const std::vector<int>&'
In file included from /usr/include/c++/5/vector:64:0,
                 from /usr/include/c++/5/bits/random.h:34,
                 from /usr/include/c++/5/random:49,
                 from /usr/include/c++/5/bits/stl_algo.h:66,
                 from /usr/include/c++/5/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/5/bits/stdc++.h:64,
                 from icc.cpp:2:
/usr/include/c++/5/bits/stl_vector.h:448:7: note: candidate: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(std::vector<_Tp, _Alloc>&&) [with _Tp = int; _Alloc = std::allocator<int>]
       operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())
       ^
/usr/include/c++/5/bits/stl_vector.h:448:7: note:   no known conversion for argument 1 from 'int' to 'std::vector<int>&&'
/usr/include/c++/5/bits/stl_vector.h:470:7: note: candidate: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(std::initializer_list<_Tp>) [with _Tp = int; _Alloc = std::allocator<int>]
       operator=(initializer_list<value_type> __l)
       ^
/usr/include/c++/5/bits/stl_vector.h:470:7: note:   no known conversion for argument 1 from 'int' to 'std::initializer_list<int>'
icc.cpp:149:25: error: cannot convert 'std::vector<int>*' to 'int*' for argument '4' to 'int query(int, int, int*, int*)'
  if (query (pB, pC, B, C))
                         ^
icc.cpp: In function 'void solve()':
icc.cpp:161:5: error: 'i' was not declared in this scope
   C[i].clear();
     ^