NOIP2015 提高組 Day T3 鬥地主

2022-05-16 07:41:04 字數 2027 閱讀 9682

牛牛最近迷上了一種叫鬥地主的撲克遊戲。鬥地主是一種使用黑桃、紅心、梅花、方片的a到k加上大小王的共5張牌來進行的撲克牌遊戲。在鬥地主中,牌的大小關 系根據牌的數碼表示如下:3<4<5<6<7<8<9<10現在,牛牛只想知道,對於自己的若干組手牌,分別最少需要多少次出牌可以將它們打光。請你幫他解決這個問題。

需要注意的是,本題中遊戲者每次可以出手的牌型與一般的鬥地主相似而略有不同。具體規則如下:

第一行包含用空格隔開的2個正整數 t,n ,表示手牌的組數以及每組手牌的張數。

接下來 t 組資料,每組資料 n 行,每行乙個非負整數對 $ a_i , b_i $ ,表示一張牌,其中 $ a_i \(表示牌的數碼,\) b_i $ 表示牌的花色,中間用空格隔開。特別的,我們用 1 來表示數碼 a, 11 表示數碼j , 121212 表示數碼q,13表示數碼 k;黑桃、紅心、梅花、方片分別用 1−4 來表示;小王的表示方法為 01 ,大王的表示方法為 02 。

共 t 行,每行乙個整數,表示打光第 iii 組手牌的最少次數。

1 87 4

8 49 1

10 4

11 1

5 11 4

1 11 17

12 3

4 32 3

5 410 2

3 312 2

0 11 3

10 1

6 212 1

11 3

5 212 4

2 27 2

樣例1說明

共有1組手牌,包含8張牌:方片7,方片8,黑桃9,方片10,黑桃j,黑桃5,方片a以及黑桃a。可以通過打單順子(方片7,方片8,黑桃9,方片10,黑桃j),單張牌(黑桃5)以及對子牌(黑桃a以及方片a)在3次內打光。

對於不同的測試點, 我們約定手牌組數t與張數n的規模如下:

該做法有乙個前提,資料是隨機的,出牌順序對後來的決策沒有影響。

似乎是一道搜尋+貪心+模擬的題目。在所有出牌規則中,我們先尋找形式固定的四帶

二、三帶

一、炸彈、三張牌、對子(火箭也算對子)和單張牌。設b[i]表示張數為i的牌有多少種。對於四帶二,如果有四張的,我們就依次看b[2]是否大於等於2、b[1]是否大於等於1、b[2]是否大於等於1,。滿足條件就按對應情況出牌。三帶一同理。每齣一次就把帶的牌在b中對應的種數減掉。那麼最後剩下的b中的值的和就是我們如果要出完手中的牌不計順子所需要次數。用它去更新答案。注意,這個是有用的,在只能單個組合打出時它能統計答案。然後是順子。其實每個順子都差不多,用兩重迴圈在計數陣列a中找到滿足條件的連續的牌並減去對應的值,如果不連續了就退出。如果連續區間的長度大於要求長度就搜尋下一層。記得退出時復原a陣列。注意k和a也算是連續的。

#include #include #include #define n 15

using namespace std;

int t,n,i,a[n],ans,len[4]=;

void dfs(int);

void shunzi(int t,int x)

if(j-i+1>=len[t]) dfs(x+1);

} for(int j=k;j>=i;j--) a[j]+=t; }}

void dfs(int x)

; for(int i=0;i<=13;i++) b[a[i]]++;

for(int i=1;i<=13;i++)

} for(int i=1;i<=13;i++)

} ans=min(ans,x+b[1]+b[2]+b[3]+b[4]);

for(int i=1;i<=3;i++) shunzi(i,x);

}int main()

dfs(0);

cout<

} return 0;

}

Noip2015提高組總結

總體而言noip還行吧,每天前兩題都穩穩地,但是最後一題做得不好。day1,看完題目後,第一題簽到,第二題很直觀想出來了,又畫了個圖驗證了一下,tarjan雖然可能爆棧,但人工棧就沒問題了。第三題認為是dp一類的東西。畢竟是第一次提高組,還是挺緊張的,一二題打得特別仔細特別慢,對拍,肉眼查錯,搞了接...

NOIP2015提高組解析

題目見此 day1 神奇的幻方 裸裸的模擬 其實也可以發現規律 i 1在i的右上方,如果已經有數了,就填在i的下方 include includeusing namespace std int a 50 50 int nx,ny,n int main else elseelse a tx ty i ...

NOIP 2015提高組 題解 分析

這一次的提高組出的題挺喪心病狂的,似乎比普及組還要容易看出演算法,隨便就400 我在洛谷上測得好像是500多。真不知ccf在想什麼?算了不說那麼多了,直接上分析 以下的題目中d1a表示第一天第一題,d2b表示第二天第三題,以此類推 題目演算法簡單分析 d1a 簡單模擬 d1b 直接掃一遍找最小環,或...