#P1645. cards
cards
这应该是 PCOI 历史上第一条通讯题。
2025/03/12 优化了部分分,细节在后面部分
题目背景
Alice 和 Bob 正在展示他们的「魔术技巧」。
首先 Alice 会随机和获得五张扑克牌,其中两两不重复且没有鬼牌。 接着她会选择其中四张牌而且依次展示给 Bob 看,然后 Bob 要猜出剩下的牌。
热知识:一副扑克牌去掉两张鬼牌后有 52 张牌,每张牌有一个花式和数值
| 花式 | 中文 | 英文 |
|---|---|---|
| ♠ | 黑桃/葵扇 | spade |
| ♥ | 红心 | heart |
| ♣ | 梅花 | club |
| ♦ | 方块/阶砖 | diamond |
数值:A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K
题目描述
你需要写两段程序,一段是 Alice (程序A),一段是 Bob (程序B)。两段程序会被写进同一个档案里 (详情见程序模板)。
例如, Alice 一开始有以下五张牌
- 梅花 K
- 黑桃 A
- 红心 9
- 黑桃 3
- 方块 3
Alice 会选择隐藏一张牌,例如
- 黑桃 A
那么 Alice 将会以特定顺序地展示其余四张牌,这个顺序由 Alice 决定,例如
- 红心 9
- 方块 3
- 梅花 K
- 黑桃 3
Bob 会顺序地看到这四张牌,并且要说出 Alice 隐藏的那一张牌,在这个例子就是
- 黑桃 A
输入/输出格式
每一张牌的格式为 <花式> <数值>
例如 club 8, heart Q
每次程序开始运行时都会先输入一个数字
- 如果是
1,则会转到程序 A ,即 Alice - 如果是
2,则会转到程序 B ,即 Bob
请参考程序模板
程序A的输入
共五行,每行一张牌。
程序A的输出
共四行,每行一张牌。
程序B的输入
同 程序A 的输出
程序B的输出
只有一行,为一张牌。
范例
程序A的输入(测资)
1
club K
spade A
heart 9
spade 3
diamond 3
程序A的输出
heart 9
diamond 3
club K
spade 3
程序B的输入(程序A的输出)
2
heart 9
diamond 3
club K
spade 3
程序B的输出(也就是最终答案)
spade A
程序模板
#include <bits/stdc++.h>
using namespace std;
// 变量、函数、结构等可以定义在这里
// 由于程序A和程序B会分开运行,所以储存在变量里的数值会在不同程序之间消失
void program_a() {
// 程序A
// 例如
/*
int a;
cin >> a;
cout << "hello from program a " << a;
*/
}
void program_b() {
// 程序B
// 例如
/*
int a, b;
cin >> a >> b;
cout << "hello from program b " << a + b;
*/
}
// 主程序
int main() {
int n;
cin >> n;
if (n == 1) program_a();
if (n == 2) program_b();
return 0;
}
太懒不想写 .py 模板。
后记 by AlphaBruh
um 比赛的时候反响似乎不太好
本来打算复制这题,做个有部分分的优化版本
但考虑到原本这一题的原意其实就是用部分分引导,就决定不单开了
部分分和特殊评判规则如下:
- 有 的测试点五张牌的点数不超过
- 有 的测试点五张牌的点数不超过 ,注意这包括了点数不超过 的部分
- 如果猜测点数错误但花色正确,该测试点仍可获得 的分数