#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的輸入(測資)
club K
spade A
heart 9
spade 3
diamond 3
程序A的輸出
heart 9
diamond 3
club K
heart 9
程序B的輸入(程序A的輸出)
heart 9
diamond 3
club K
heart 9
程序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 比賽的時候反響似乎不太好
本來打算複製這題,做個有部分分的優化版本
但考慮到原本這一題的原意其實就是用部分分引導,就決定不單開了
部分分和特殊評判規則如下:
- 有 的測試點五張牌的點數不超過
- 有 的測試點五張牌的點數不超過 ,注意這包括了點數不超過 的部分
- 如果猜測點數錯誤但花色正確,該測試點仍可獲得 的分數