2018南京區域資格賽C GDY

2021-08-27 00:06:35 字數 1357 閱讀 9556

原題傳送門

題意:

簡單的撲克牌遊戲,先定義撲克牌的大小如下:

然後從第乙個開始出最小的牌,然後其餘玩家接著出牌,誰先沒有手牌誰就獲勝,並輸出其餘人的手牌點數和

出牌規則:

一開局從第一位玩家開始每人抽取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瓶小團喝。請問應該如何購買可樂,使得小美和小團得到的快樂程度的和的期望值最大?現在請求出購...