原題傳送門
題意:
簡單的撲克牌遊戲,先定義撲克牌的大小如下:
然後從第乙個開始出最小的牌,然後其餘玩家接著出牌,誰先沒有手牌誰就獲勝,並輸出其餘人的手牌點數和
出牌規則:
一開局從第一位玩家開始每人抽取5張牌,保證第一位玩家回合開始前每人手牌數不低於1張
玩家a出了一張2的話,從玩家a開始,所有人按順序從牌堆抽取1張牌,然後玩家a出一張最小的牌
玩家出的牌必須得是上一張打出的牌的點數+1,否則可以選擇出一張2,若是前面兩種牌都沒有,則跳過該玩家回合
如果所有的玩家的回合都被跳過(即上一張打出的牌為b,而所有的玩家都沒有b+1的牌或者是2的牌)則從最後乙個出牌的玩家開始,所有的玩家都需要從牌堆裡面抽取1張牌,並出一張最小的牌
若是牌堆裡面已經沒有牌了,則忽略抽牌操作
思路:
其實難點在於題意,題意裡面描述的是只要前面的玩家(我就理解成了上乙個玩家,但實際上是上乙個出牌的玩家)沒有打出2,那麼這個玩家就可以打出2...看了別人的ac**才發現自己題意讀錯了.讀懂了題意之後直接模擬即可
ac**:
#include
using
namespace
std;
const
int n = 2e2 + 10, m = 2e4 + 10;
multiset
a[n];//3~13, 1
int b[m], cnt = 0, pre;
int n, m, t, ans[n];
int num[n];//2
void draw(int man)
bool play(int man)
bool first(int man)
else num[man] --, pre = 15;
return num[man] + a[man].size() > 0;
}int main()
printf("case #%d:\n", ca);
for(int i = 0; i < n; i ++)
for(int j = 0; j < 5; j ++)
draw(i);
int man = 0;
bool flag = first(0);
while(flag)
else
if(i == n) pre = 15;//抽牌}}
for(int i = 0; i < n; i ++)
if(ans[i]) printf("%d\n", ans[i]);
else
puts("winner");}}
return
0;}
2018南京區域賽 J Prime Game
完全沒有頭緒 聽完隊友講的我還是楞了好半天菜慢慢理解.我好菜啊 首先要弄懂題目的意思,轉換一下題意就是求每個素因子出現區間的次數.區間長度最短為1.我們分析,第乙個數的因子會影響1 n個區間 暫時不考慮重複 第二個數的因子會影響2 n 1 個區間,以此類推.因此我們只需要分解每乙個數然後加上影響的區...
2018 CodeM 資格賽 下單
這道題目應該算簽到題了吧 我大概掃了一下,感覺這道題目應該是最簡單的 注 如果您現在還沒有ac,並且比賽還沒有結束,我建議再想想,認真再重新讀下題目描述,或許你就會發現原來是自己想複雜了 不管你是不是這樣的情形,反正我當時是這樣的,哈哈 程式設計 1000分 下單 時間限制 c c 1秒,其他語言 ...
2018 CodeM 資格賽 B 可樂
小美和小團最近沉迷可樂。可供ta們選擇的可樂共有k種,比如可口可樂 零度可樂等等,每種可樂會帶給小美和小團不同的快樂程度。ta們一共要買n瓶可樂,每種可樂可以買無限多瓶,小美會隨機挑選其中的m瓶喝,剩下的n m瓶小團喝。請問應該如何購買可樂,使得小美和小團得到的快樂程度的和的期望值最大?現在請求出購...