囚徒困境
該比賽已結束,您無法在比賽模式下遞交該題目。您可以點選“在題庫中開啟”以普通模式檢視和遞交本題。
Problem Description
Author: louishuang
囚犯困境(英語:Prisoner's dilemma)、囚犯兩難[1]是賽局理論的非零和賽局中具代表性的例子,反映個人最佳選擇並非群體的最佳選擇,且在一個群體中,個人做出理性選擇卻往往導致集體的非理性。雖然這是一個理論上的情境,但現實中的價格競爭等也會出現類似情況。
單次發生的囚犯困境,和多次重複的囚犯困境結果不會一樣。
在重複的囚犯困境中,賽局被反覆地進行。因而參與者都有機會去「懲罰」另一個參與者前一回合的不合作行為。這時,合作可能會作為均衡的結果出現。欺騙行為被受到懲罰的威脅所制止,從而導向一個較好的結果。當次數接近無限,納許均衡趨向於帕雷托最適。
當囚徒們可以互相溝通時,彼此合作可為全體帶來最佳利益(縮短刑期);但在無法溝通時,出賣同夥可為自己帶來更多的利益(無罪開釋),同時同夥把自己招出來可為他帶來利益。所以,互相出賣,反而能獲得最大利益。實際上,執法機構不可能設立如此情境來誘使囚徒招供,因為囚徒必須考慮刑期以外的因素(出賣同夥會受到報復等),則不能只以刑期作考量,所以是一個理論情境。
(以上來自維基百科)
總之這題就是來玩囚徒困境
但是是升級版
你跟你的好隊員打競程出bug
已經debug吃了wa五次了
你現在有三種選擇
C :合作認真寫題
S :開始切分頁假裝看題目其實是在看yt划水
R :直接把插頭拔掉大喊電腦壞了然後帥氣離場
這三種選擇會帶來不同的懲罰:
雙方都選 C :合作無間,只需要各花 1 小時 就修好。
你選 S ,隊友選 C (認真):你很開心的耍廢(0 小時),隊友自己寫了很久(4 小時)。
雙方都選 S :兩個人都在裝忙,最後才開始慢慢寫,各花6 小時。
你選 R ,隊友選 C 或 S:你成功直接結束比賽,背起包包回家睡覺(0 小時),而你的隊友必須獨自留下來跟裁判解釋並重寫程式,多花 10 小時。
雙方都選 R :你們兩人的手在電源插座前相撞,當場被抓包作弊。兩人直接被踢出,並留下來被噴 20 小時。
Input Format
程式開始時,系統會先輸入一個整數 () 給你,代表總共要經歷幾次 debug。
Output Format
接下來將進行 次迴圈:
你先輸出一個字元 S 或 C 或 R(記得endl)。
系統接著輸入一個字元 S 或 C 或 R 給你,代表你的隊友在這一回合做的決定。
Hint
這是一題互動題
你將在這場程式團賽中經歷 次寫出 bug 的時刻。
系統背後有 4 種不同性格的ai隊友會有不同的選擇邏輯
你必須寫一個程式,與系統進行 輪的賽局。
AC :平均每局 ≤ 1.0 小時。
部分給分:介於 1.0 ~ 2.5之間,按比例給分。
(每次輸出你的決定後,記得cout << endl,例如: cout << "S" << endl;)
在比賽結束後,會拿著大家最後submit的code做一次混戰,這裡拿到的分數最後會只剩下50%,剩下的50%會由混戰的名次去配分,要等到開榜才會知道分數:D
Gemini寫的範例code:
#include
#include
using namespace std;
int main() {
int n;
// 1. 讀取總回合數 (N 局)
if (!(cin >> n)) return 0;
// 用陣列記錄隊友過去的歷史動作
vector history;
for (int i = 0; i < n; i++) {
// ==========================================
// 💡 請在這裡實作你的「終極心機演算法」!
//
// 你的可用招式:
// 'C':認真 (Code)
// 'S':划水 (Slack)
// 'R':拔線 (Run - 核武器)
// ==========================================
char my_move = 'C';
// 2. 輸出你的決定 (⚠️ 務必加上 endl 清空緩衝區!)
cout << my_move << endl;
// 3. 讀取系統的回應 (隊友這回合真正出的招)
char teammate_move;
cin >> teammate_move;
// 把隊友的決定存入歷史紀錄中
history.push_back(teammate_move);
}
return 0;
}