제출 #464981

#제출 시각아이디문제언어결과실행 시간메모리
464981markoCombo (IOI18_combo)C++17
100 / 100
35 ms560 KiB
#include <bits/stdc++.h>

using namespace std;

// string s= "XB";

// int guesses{};
// int idx=0;
// vector<string> strings {
//     "ABB", "ABX", "ABY", "AXB", "AXX", "AXY", "AYB", "AYX", "AYY",
//     "BAA", "BAX", "BAY", "BXA", "BXX", "BXY", "BYA", "BYX", "BYY",
//     "XAA", "XAB", "XAY", "XBA", "XBB", "XBY", "XYA", "XYB", "XYY",
//     "YAA", "YAB", "YAX", "YBA", "YBB", "YBX", "YXA", "YXB", "YXX", 
// };

int press(string p);
// {
//     string s=strings[idx];
//     guesses++;
//     int ans{};

//     for (auto i=0;i<p.size();i++) {
//         for (auto j=i;(j<p.size())&&((j-i)<s.size())&&(p[j]==s[j-i]);j++) {
//             ans=max(ans, j-i+1);
//         }
//     }

//     return ans;
// }


string guess_sequence(int N) {
    // figure out the first letter

    if (N==1) {
        if (press("A")==1) return "A";
        else if (press("B")==1) return "B";
        else if (press("X")==1) return "X";
        else return "Y";
    }

    char first={};

    auto res=press("AB");
    if (res==2) {
        first='A';
    }
    else if (res==1) {
        if (press("A")==1) 
            first='A';
        else 
            first='B';
    }
    else if (press("X")) 
        first='X';
    else 
        first='Y';
        
    string ans{};

    ans+=first;
    for (int i=1;i<N-1;i++) {
        if (first=='A') {
            string ask=ans+'X'+first+ans+"YB"+ans+"YY"+ans+"YX";
            auto res=press(ask);

            //cout << "i="<<i<<",ans="<<ans<<endl;
            if (res==ans.size())
            {
                // B
                ans+='B';
            }
            else if(res==ans.size()+1)
            {
                ans+='X';
            }
            else 
            {
                ans+='Y';
            }
        }
        else if (first=='B') {
            string ask=ans+'X'+first+ans+"YA"+ans+"YY"+ans+"YX";
            auto res=press(ask);
            if (res==ans.size())
            {
                ans+='A';
            }
            else if(res==ans.size()+1)
            {
                ans+='X';
            }
            else 
            {
                ans+='Y';
            } 
        }
        else if (first=='X') {
            string ask=ans+'A'+first+ans+"YB"+ans+"YY"+ans+"YA";
            auto res=press(ask);
            if (res==ans.size())
            {
                ans+='B';
            }
            else if(res==ans.size()+1)
            {
                ans+='A';
            }
            else 
            {
                ans+='Y';
            } 
        }
        else if (first=='Y') {
            string ask=ans+'A'+first+ans+"XB"+ans+"XA"+ans+"XX";
            auto res=press(ask);
            if (res==ans.size())
            {
                ans+='B';
            }
            else if(res==ans.size()+1)
            {
                ans+='A';
            }
            else 
            {
                ans+='X';
            } 
        }
    }

    if (first=='A') {
        if (press(ans+'B')==ans.size()+1) {
            ans+='B';
        }
        else if (press(ans+'X')==ans.size()+1)
        {
            ans+='X';
        }
        else ans+='Y';

    }
    else if (first=='B') {
        if (press(ans+'A')==ans.size()+1) {
            ans+='A';
        }
        else if (press(ans+'X')==ans.size()+1)
        {
            ans+='X';
        }
        else ans+='Y';

    }
    else if (first=='X') {
        if (press(ans+'B')==ans.size()+1) {
            ans+='B';
        }
        else if (press(ans+'A')==ans.size()+1)
        {
            ans+='A';
        }
        else ans+='Y';

    }
    else if (first=='Y') {
        if (press(ans+'B')==ans.size()+1) {
            ans+='B';
        }
        else if (press(ans+'X')==ans.size()+1)
        {
            ans+='X';
        }
        else ans+='A';   
    }

    return ans;
}

// auto main() -> int {
//     for (auto i=0;i<strings.size();i++) {
//         if (strings[i] != guess_sequence(3)) {
//             cout << "ERROR: " << guess_sequence(3) << ", EXPECTED: " << strings[i] << endl;

//             return 0;
//         }
//         else cout << "OK" << endl;
//         idx++;
//     }
// }

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

combo.cpp: In function 'std::string guess_sequence(int)':
combo.cpp:68:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |             if (res==ans.size())
      |                 ~~~^~~~~~~~~~~~
combo.cpp:73:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |             else if(res==ans.size()+1)
      |                     ~~~^~~~~~~~~~~~~~
combo.cpp:85:20: 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 (res==ans.size())
      |                 ~~~^~~~~~~~~~~~
combo.cpp:89:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   89 |             else if(res==ans.size()+1)
      |                     ~~~^~~~~~~~~~~~~~
combo.cpp:101:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  101 |             if (res==ans.size())
      |                 ~~~^~~~~~~~~~~~
combo.cpp:105:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  105 |             else if(res==ans.size()+1)
      |                     ~~~^~~~~~~~~~~~~~
combo.cpp:117:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  117 |             if (res==ans.size())
      |                 ~~~^~~~~~~~~~~~
combo.cpp:121:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  121 |             else if(res==ans.size()+1)
      |                     ~~~^~~~~~~~~~~~~~
combo.cpp:133:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  133 |         if (press(ans+'B')==ans.size()+1) {
      |             ~~~~~~~~~~~~~~^~~~~~~~~~~~~~
combo.cpp:136:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  136 |         else if (press(ans+'X')==ans.size()+1)
      |                  ~~~~~~~~~~~~~~^~~~~~~~~~~~~~
combo.cpp:144:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  144 |         if (press(ans+'A')==ans.size()+1) {
      |             ~~~~~~~~~~~~~~^~~~~~~~~~~~~~
combo.cpp:147:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  147 |         else if (press(ans+'X')==ans.size()+1)
      |                  ~~~~~~~~~~~~~~^~~~~~~~~~~~~~
combo.cpp:155:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  155 |         if (press(ans+'B')==ans.size()+1) {
      |             ~~~~~~~~~~~~~~^~~~~~~~~~~~~~
combo.cpp:158:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  158 |         else if (press(ans+'A')==ans.size()+1)
      |                  ~~~~~~~~~~~~~~^~~~~~~~~~~~~~
combo.cpp:166:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  166 |         if (press(ans+'B')==ans.size()+1) {
      |             ~~~~~~~~~~~~~~^~~~~~~~~~~~~~
combo.cpp:169:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  169 |         else if (press(ans+'X')==ans.size()+1)
      |                  ~~~~~~~~~~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...