안녕하세요. 오늘은 차분 공격을 할 거예요.
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;
}
감사합니다.