답안 #311746

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
311746 2020-10-11T11:50:40 Z zakaF 콤보 (IOI18_combo) C++14
0 / 100
1 ms 200 KB
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <cstring>
#include "combo.h"
using namespace std;
using ll = long long;
using ld = long double;
using uint = unsigned int;
using ull = unsigned long long;

#define pb push_back
#define mp make_pair
#define sz(x) (ll)x.size()
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define fi first
#define se second

string guess_sequence(int N)
{
		string ans;
		vector<string> a[N+1];
		if(N == 1)
		{
			if(press("A") == 1)
				ans = "A";
			else if(press("B")==1)
				ans = "B";
			else if(press("X") == 1)
				ans = "X";
			else
				ans = "Y";
			return ans;
		}
		a[0] = a[1] = {"A","B","X","Y"};
		int start = 1;
		bool ok = 0;
		string first = "Y";
		for(int i = 0;i<sz(a[0])-1&&!ok;i++)
		{
			for(int j = 0;j<sz(a[1])&&!ok;j++)
			{
				if(a[0][i] == a[1][j])continue;
				int x=  press(a[0][i] + a[1][j]);
				if(x == 2)
				{
					start+=2;
					ans+=a[0][i]+a[1][j];
					first = a[0][i];
					ok = 1;
				}
				else if(x == 1)
				{
					start++;
					first = a[0][i];
					a[1].erase(a[1].begin()+j);
					ans+=a[0][i];
					ok = 1;
				}
				else
					break;
			}
		}
		if(ans.empty())
			ans+=first;
		for(int j = 0;j<4;j++)
			if(a[1][j] == first)
			{
				a[1].erase(a[1].begin()+j);
				break;
			}
		
		for(int i = 2;i<N;i++)
		{
			for(string x:a[0])
				if(x!=first)
					a[i].pb(x);
		}
		for(int i = start;i<N-1;i++)
		{
			if(sz(a[i]) == 1)
			{
				ans+=a[i][0];
				continue;
			}
			bool did = 0;
			for(int j = 0;j<sz(a[i])&&!did;j++)
				for(int k = 0;k<sz(a[i+1])&&!did;k++)
				{
					int x = press(ans+a[i][j]+a[i+1][k]);
					if(x == i+1)
					{
						ans+=a[i][j];
						a[i+1].erase(a[i+1].begin()+k);
						did = 1;
					}
					else if(x == i+2)
					{
						ans+=a[i][j]+a[i+1][k];
						did = 1;
						i++;
					}
					else
						break;
				}
		}
		if(sz(a[N-1]) == 1)
				ans+=a[N-1][0];
			else
			{
				for(int i = 0;i<sz(a[N-1])-1;i++)
					if(press(ans+a[N-1][i])==N)
					{
						ans+=a[N-1][i];
						break;
					}
				if(sz(ans)<N)
					ans+=a[N-1].back();
			}
		return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Incorrect 0 ms 200 KB Wrong Answer: wrong guess.
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 200 KB Output is correct
2 Correct 1 ms 200 KB Output is correct
3 Correct 1 ms 200 KB Output is correct
4 Correct 1 ms 200 KB Output is correct
5 Incorrect 1 ms 200 KB Wrong Answer: wrong guess.
6 Halted 0 ms 0 KB -