안녕하세요. 오늘은 차분 공격을 할 거예요.

문제

https://www.acmicpc.net/problem/30506

아이디어

맨 처음에 가위를 냈을 때의 이긴 횟수를 before이라고 하고 i번째를 가위에서 바위로 바꿨을 때의 이긴 횟수를 now라고 합시다.

이를 이용해서 before+1이 now이면 정답은 가위, before이 now이면 정답은 바위, before-1이 now이면 정답은 보라고 해주면 됩니다.

소스코드

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    int before, now, i;
    string s, ans;
    for (i = 0; i < 100; i++) s += '2';

    cin >> before;
    for (i = 0; i < 100; i++)
    {
        s[i] = '0';
        cout << "? " << s << "\n";
        cout << flush;
        cin >> now;

        if (now < before) //줄어들면
            ans += '5';
        else if (now == before) //똑같으면
            ans += '0';
        else //늘어나면
            ans += '2';
        s[i] = '2';
    }

    cout << "! " << ans;
    cout << flush;
}


감사합니다.

0개의 댓글