#autumnfest11. [autumn_fest_11]Batch Style Mastermind
[autumn_fest_11]Batch Style Mastermind
配点
満点
150
部分点
100
问题描述
进行猜数字游戏(MasterMind,hit和blow)。
基本的MasterMind规则如下:
- 主持人选择一个由9位数字('0'-'9')组成的字符串作为答案。答案中可以有重复数字,并且第一位数字可以是0。
- 参与者猜测一个由9位数字组成的字符串作为答案。
- 主持人根据猜测回答给出两个整数:hit和blow。
- hit表示在答案和猜测中位置相同且数字相同的个数。
- blow表示在去除了hit的数字后,在答案和猜测中都出现过的数字的个数。即计算交集的大小。“在答案和猜测中都出现过但位置不同的数字的个数”。
- 当参与者的猜测与答案一致时结束游戏。否则回到步骤2。
下面是hit和blow的例子。为了简洁起见,示例中使用了4位数字而不是9位数字。
答案
猜测
hit
blow
0123
0134
2
1
0123
1199
1
0
0123
9911
0
1
1123
9911
0
2
0113
3911
1
2
不过,请注意,这里的MasterMind有一些不同之处,并附加了以下条件:
- 参与者为了猜测答案,一次性发送由9个由'0'-'9'组成的字符串(我们称之为"test")。随机排列的代表每个字符串的hit和blow数对将以随机顺序返回。
- 如果通过多次测试可以猜出正确答案,则只需要发送一个由'0'-'9'组成的9位字符串(我们称之为"challenge")。如果发送的字符串与答案相匹配,则输出Accepted,否则输出Wrong Answer。
- 在一个测试用例中,不能多次使用相同的test。即使是在多个测试用例中也不行。
- 最多进行20次test。
- 只能进行一次challenge。
下面的情况将导致运行错误:
- 调用test的次数超过规定次数。
- 在test中多次使用相同的字符串。
- 发送的字符串不符合指定的格式要求。
如果所有测试用例都正确,那么将选择test次数最多的测试用例作为T,并且给予以下分数:当时得100分,当时得150分。
输入输出格式
执行test时,将9个由'0'-'9'组成的字符串以空格分隔的形式输出到标准输出。
示例:
printf("? %s %s ... %s\\n", t[0], t[1], ... t[8]);
fflush(stdout);
测试结果将从标准输入中读取18个整数。
示例:
int hit, blow;
for (int i = 0; i < 9; ++i) {
scanf("%d %d", &hit, &blow);
// 使用hit和blow
}
执行challenge时,将9位由'0'-'9'组成的字符串以空格分隔的形式输出到标准输出。
示例:
printf("! %s\\n", answer);
fflush(stdout);
输入输出样例
假设答案是"123456788",那么一个输入输出的例子如下所示。
程序输出
程序输入
? 111111111 222222222 333333333 444444444 555555555 666666666 777777777 888888888 012345678
1 0 1 0 2 0 1 0 1 7 1 0 1 0 1 0 1 0
? 000000000 000000001 000000002 000000003 000000004 000000005 000000006 000000007 000000008
0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 0
......
......
! 123456789
Writer: tomerun
Source Name
Autumn Fest