303908: CF753B. Interactive Bulls and Cows (Easy)

Memory Limit:256 MB Time Limit:2 S
Judge Style:Text Compare Creator:
Submit:0 Solved:0

Description

Interactive Bulls and Cows (Easy)

题意翻译

### 题目描述 交互题 一个脍炙人口的猜数游戏。 在一张纸上,一位玩家写下一个四位数(保证各位数码不重复,不含前导零)。第二位玩家尝试猜出纸上的数。每猜一次第一位玩家都会给予第二位玩家相应的提示。若猜测的数字与纸上的数字有数码和位置均相同,记该数码为$A$类数码。若所猜数字与纸上数字有数码相同但位置不同,记该数码为$B$类数码。显然,提示由一对数字组成,表示$A$类数码和$B$类数码的数量。(所猜数字可以有重复) 更具体地,记纸上数字为$s$,玩家询问数字为$x$。$A$类数码的数量为对于某个位置$i(1<=i<=4)$使得$s[i]=x[i]$的$i$的数量。$B$类数码的数量为对于某两个位置$i,j(1<=i,j<=4)$使得$s[i]=x[j],i \neq j$的$i,j$的对数。 例如:纸上的数字为"0427"所猜的数字"0724",则玩家一的提示为"2A2B"。其中,$A$类数码为"0","2"$B$类数码为"4","7"。 ### 输入格式 程序将从系统中读入两个整数$x,y$分别表示$A$类和$B$类数码的数量。 若系统返回为4 0,则您的程序应当终止。 ### 输出格式 一行,表示您将要询问的数字,每行结束后,需执行刷新操作。 您最多有50次询问机会

题目描述

This problem is a little bit unusual. Here you are to implement an interaction with a testing system. That means that you can make queries and get responses in the online mode. Please be sure to use the stream flushing operation after each query's output in order not to leave part of your output in some buffer. For example, in C++ you've got to use the fflush(stdout) function, in Java — call System.out.flush(), and in Pascal — flush(output). Bulls and Cows (also known as Cows and Bulls or Pigs and Bulls or Bulls and Cleots) is an old code-breaking paper and pencil game for two players, predating the similar commercially marketed board game Mastermind. On a sheet of paper, the first player thinks a secret string. This string consists only of digits and has the length $ 4 $ . The digits in the string must be all different, no two or more equal digits are allowed. Then the second player tries to guess his opponent's string. For every guess the first player gives the number of matches. If the matching digits are on their right positions, they are "bulls", if on different positions, they are "cows". Thus a response is a pair of numbers — the number of "bulls" and the number of "cows". A try can contain equal digits. More formally, let's the secret string is $ s $ and the second player are trying to guess it with a string $ x $ . The number of "bulls" is a number of such positions $ i $ ( $ 1<=i<=4 $ ) where $ s[i]=x[i] $ . The number of "cows" is a number of such digits $ c $ that $ s $ contains $ c $ in the position $ i $ (i.e. $ s[i]=c $ ), $ x $ contains $ c $ , but $ x[i]≠c $ . For example, the secret string is "0427", the opponent's try is "0724", then the answer is $ 2 $ bulls and $ 2 $ cows (the bulls are "0" and "2", the cows are "4" and "7"). If the secret string is "0123", the opponent's try is "0330", then the answer is $ 1 $ bull and $ 1 $ cow. In this problem you are to guess the string $ s $ that the system has chosen. You only know that the chosen string consists of $ 4 $ distinct digits. You can make queries to the testing system, each query is the output of a single $ 4 $ -digit string. The answer to the query is the number of bulls and number of cows. If the system's response equals "4 0", that means the interaction with your problem is over and the program must terminate. That is possible for two reasons — the program either guessed the number $ x $ or made an invalid action (for example, printed letters instead of digits). Your program is allowed to do at most $ 50 $ queries. You can hack solutions of other participants providing a 4-digit string containing distinct digits — the secret string.

输入输出格式

输入格式


To read answers to the queries, the program must use the standard input. The program will receive pairs of non-negative integers in the input, one pair per line. The first number in a pair is a number of bulls and the second one is a number of cows of the string $ s $ and the string $ x_{i} $ printed by your program. If the system response equals "4 0", then your solution should terminate. The testing system will let your program read the $ i $ -th pair of integers from the input only after your program displays the corresponding system query in the output: prints value $ x_{i} $ in a single line and executes operation flush.

输出格式


The program must use the standard output to print queries. Your program must output requests — $ 4 $ -digit strings $ x_{1},x_{2},... $ , one per line. After the output of each line the program must execute flush operation. The program should read the answer to the query from the standard input. Your program is allowed to do at most $ 50 $ queries.

输入输出样例

输入样例 #1

0 1
2 0
1 1
0 4
2 1
4 0

输出样例 #1

8000
0179
3159
3210
0112
0123

说明

The secret string $ s $ in the example is "0123".

Input

题意翻译

### 题目描述 交互题 一个脍炙人口的猜数游戏。 在一张纸上,一位玩家写下一个四位数(保证各位数码不重复,不含前导零)。第二位玩家尝试猜出纸上的数。每猜一次第一位玩家都会给予第二位玩家相应的提示。若猜测的数字与纸上的数字有数码和位置均相同,记该数码为$A$类数码。若所猜数字与纸上数字有数码相同但位置不同,记该数码为$B$类数码。显然,提示由一对数字组成,表示$A$类数码和$B$类数码的数量。(所猜数字可以有重复) 更具体地,记纸上数字为$s$,玩家询问数字为$x$。$A$类数码的数量为对于某个位置$i(1<=i<=4)$使得$s[i]=x[i]$的$i$的数量。$B$类数码的数量为对于某两个位置$i,j(1<=i,j<=4)$使得$s[i]=x[j],i \neq j$的$i,j$的对数。 例如:纸上的数字为"0427"所猜的数字"0724",则玩家一的提示为"2A2B"。其中,$A$类数码为"0","2"$B$类数码为"4","7"。 ### 输入格式 程序将从系统中读入两个整数$x,y$分别表示$A$类和$B$类数码的数量。 若系统返回为4 0,则您的程序应当终止。 ### 输出格式 一行,表示您将要询问的数字,每行结束后,需执行刷新操作。 您最多有50次询问机会

加入题单

算法标签: