Submission #169217

#TimeUsernameProblemLanguageResultExecution timeMemory
169217davitmargCave (IOI13_cave)C++17
Compilation error
0 ms0 KiB
/*DavitMarg*/
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <map>
#include <set>
#include <queue>
#include <iomanip>
#include <bitset>
#include <stack>
#include <cassert>
#include <iterator>
#include <fstream>
#define mod 1000000007ll
#define LL long long
#define LD long double
#define MP make_pair
#define PB push_back
#define all(v) v.begin(), v.end()
using namespace std;

const int N = 5005;

#ifndef death
#include "cave.h"
#endif

#ifdef death

int tryCombination(vector<int> a)
{
	cout << "? ";
	for (int i = 0; i < a.size(); i++)
		cout << a[i];
	cout << endl;
	int ans;
	cin >> ans;
	return ans;
}

void answer(vector<int> a, vector<int> d)
{
	cout << "! ";
	for (int i = 0; i < a.size(); i++)
		cout << a[i];
	cout << endl;
	cout << "! ";
	for (int i = 0; i < a.size(); i++)
		cout << d[i] << " ";
	cout << endl;
}


#endif // death


int n, used[N];
vector<int> a, p;

vector<int> norm(vector<int> x)
{
	while (x.size() < n)
		x.PB(0);
	for (int i = 0; i < x.size(); i++)
		if (used[i])
			x[i] = a[i];
	return x;
}

void explore(int L)
{
	n = L;
	a.resize(n);
	p.resize(n);
	for (int I = 0; I < n; I++)
	{
		int l=0, r=n-1, m,pos=-1;
		vector<int> x(n,0);

		int val = tryCombination(norm(x));

		if (val == -1)
		{
			for (int i = 0; i < n; i++)
				x[i] ^= 1;
			val = tryCombination(norm(x));
		}

		while (l <= r)
		{
			int m = (l + r) / 2;
			for (int i = m + 1; i < n; i++)
				x[i] ^= 1;

			int newval = tryCombination(norm(x));
			/*cout << l << " : " << r << " = "<< newval << endl;*/
			
			if (l == r)
			{
				pos = l;
				if (-1 == newval)
				{
					x[l] ^= 1;
					newval = tryCombination(norm(x));
				}
				val = newval;
				break;
			}

			if (newval == val)
				r = m;
			else
			{
				l = m + 1;
				if (newval == -1)
				{
					for (int i = m + 1; i < n; i++)
						x[i] ^= 1;
					newval = tryCombination(norm(x));
				}

				val = newval;
			}

		}
		while (used[pos])
			pos--;
		used[pos] = 1;
		a[pos] = !x[pos];
		p[pos] = val;
	}
	answer(a, p);
}

#ifdef death

int main()
{
	int L;
	cin >> L;
	explore(L);
	return 0;
}

#endif

/*



*/

Compilation message (stderr)

cave.cpp: In function 'std::vector<int> norm(std::vector<int>)':
cave.cpp:65:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while (x.size() < n)
         ~~~~~~~~~^~~
cave.cpp:67:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < x.size(); i++)
                  ~~^~~~~~~~~~
cave.cpp: In function 'void explore(int)':
cave.cpp:83:35: error: cannot convert 'std::vector<int>' to 'int*' for argument '1' to 'int tryCombination(int*)'
   int val = tryCombination(norm(x));
                                   ^
cave.cpp:89:32: error: cannot convert 'std::vector<int>' to 'int*' for argument '1' to 'int tryCombination(int*)'
    val = tryCombination(norm(x));
                                ^
cave.cpp:98:39: error: cannot convert 'std::vector<int>' to 'int*' for argument '1' to 'int tryCombination(int*)'
    int newval = tryCombination(norm(x));
                                       ^
cave.cpp:107:37: error: cannot convert 'std::vector<int>' to 'int*' for argument '1' to 'int tryCombination(int*)'
      newval = tryCombination(norm(x));
                                     ^
cave.cpp:122:37: error: cannot convert 'std::vector<int>' to 'int*' for argument '1' to 'int tryCombination(int*)'
      newval = tryCombination(norm(x));
                                     ^
cave.cpp:80:19: warning: unused variable 'm' [-Wunused-variable]
   int l=0, r=n-1, m,pos=-1;
                   ^
cave.cpp:135:13: error: cannot convert 'std::vector<int>' to 'int*' for argument '1' to 'void answer(int*, int*)'
  answer(a, p);
             ^