제출 #1019441

#제출 시각아이디문제언어결과실행 시간메모리
1019441ZanP콤보 (IOI18_combo)C++14
10 / 100
171 ms37728 KiB
#include <bits/stdc++.h>
using namespace std;

int press(string p);
// {
//     cout << p << '\n';
//     int a; cin >> a;
//     return a;
// }

int n;
string z;
string p,s,t;
void make_bases()
{
    p.resize(n-1);
    s.resize(n-1);
    t.resize(n-1);
    vector<char> c(3);
    if(z[0] == 'A'){
        c[0] = 'X';
        c[1] = 'Y';
        c[2] = 'B';
    } else if(z[0] == 'B') {
        c[0] = 'A';
        c[1] = 'X';
        c[2] = 'Y';
    } else if(z[0] == 'X'){
        c[0] = 'A';
        c[1] = 'B';
        c[2] = 'Y';
    } else if(z[0] == 'Y'){
        c[0] = 'A';
        c[1] = 'B';
        c[2] = 'X';
    }

    vector<int> rper = {0,1,2};
    p[0] = c[0];
    s[0] = c[1];
    t[0] = c[2];
    for(int i= 1;i<n;i++)
    {
        for(int j = 3;j>=1;j--){
            int a = rand()%j;
            int b = rper[a];
            rper[a] = rper[j-1];
            rper[j-1] = b;
        }
        p[i] = c[rper[0]];
        s[i] = c[rper[1]];
        t[i] = c[rper[2]];
    }
}
void f(int m, string & ps, string & ss, string & ts);

void g(string & ps, string & ss, string & ts)
{
    if(z.size() == n){return;}
    string ask = z;
    for(int i = 0;i<n-z.size();i++){ask.push_back(ps[i]);}
    for(int i = 0;i<z.size();i++){ask.push_back(z[i]);}
    for(int i = 0;i<n-z.size();i++){ask.push_back(ss[i]);}
    int a = press(ask);
    if(a == z.size()){
        z.push_back(ts[0]);
        g(ps,ss,ts);
    }else{
        f(a-z.size(),ps,ss,ts);
    }
}

void f(int m, string & ps, string & ss, string & ts)
{
    if(z.size() == n){return;}
    string ask = z;
    for(int i = 0;i<m;i++){ask.push_back(ps[i]);}
    for(int i = 0;i<n-m-z.size();i++){ask.push_back(ss[i]);}
    for(int i= 0;i<z.size();i++){ask.push_back(z[i]);}
    for(int i = 0;i<m;i++){ask.push_back(ps[i]);}
    for(int i = 0;i<n-m-z.size();i++){ask.push_back(ts[i]);}

    int a = press(ask);

    if(a == z.size()){
        for(int i = 0;i<m;i++){z.push_back(ss[i]);}
        if(ss[m] == ps[0]){g(ss,ts,ps);}
        else if(ss[m] == ss[0]){g(ps,ts,ss);}
        else {g(ps,ss,ts);}

    } else {
        for(int i = 0;i<m;i++){z.push_back(ps[i]);}
        if(ps[m] == ps[0]){ f(a-z.size(), ss, ts, ps);}
        else if(ps[m] == ss[0]){ f(a-z.size(), ps, ts, ss);}
        else { f(a-z.size(), ps, ss, ts);}
    }
}

string guess_sequence(int N)
{
    n = N;
    srand(6);
    z.reserve(n);
    int a = press("AB");
    if(a == 2){z = "AB";}
    else if(a == 1){
        if(press("A")){
            z = "A";
        }else{
            z = "B";
        }
    }else{
        if(press("X")){
            z = "X";
        }else{
            z = "Y";
        }
    }
    make_bases();
    g(p,s,t);
    return z;
}
// int main()
// {
//     int x; cin >> x; cout << guess_sequence(x) << '\n';
//     return 0;
// }

컴파일 시 표준 에러 (stderr) 메시지

combo.cpp: In function 'void g(std::string&, std::string&, std::string&)':
combo.cpp:59:17: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   59 |     if(z.size() == n){return;}
      |        ~~~~~~~~~^~~~
combo.cpp:61:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   61 |     for(int i = 0;i<n-z.size();i++){ask.push_back(ps[i]);}
      |                   ~^~~~~~~~~~~
combo.cpp:62:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |     for(int i = 0;i<z.size();i++){ask.push_back(z[i]);}
      |                   ~^~~~~~~~~
combo.cpp:63:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |     for(int i = 0;i<n-z.size();i++){ask.push_back(ss[i]);}
      |                   ~^~~~~~~~~~~
combo.cpp:65:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |     if(a == z.size()){
      |        ~~^~~~~~~~~~~
combo.cpp: In function 'void f(int, std::string&, std::string&, std::string&)':
combo.cpp:75:17: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   75 |     if(z.size() == n){return;}
      |        ~~~~~~~~~^~~~
combo.cpp:78:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |     for(int i = 0;i<n-m-z.size();i++){ask.push_back(ss[i]);}
      |                   ~^~~~~~~~~~~~~
combo.cpp:79:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |     for(int i= 0;i<z.size();i++){ask.push_back(z[i]);}
      |                  ~^~~~~~~~~
combo.cpp:81:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |     for(int i = 0;i<n-m-z.size();i++){ask.push_back(ts[i]);}
      |                   ~^~~~~~~~~~~~~
combo.cpp:85:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |     if(a == z.size()){
      |        ~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...