BZOJ 1028 麻將 列舉

2022-07-17 10:39:10 字數 2095 閱讀 4396

題目大意:

麻將是中國傳統的娛樂工具之一。麻將牌的牌可以分為字牌(共有東、南、西、北、中、發、白七種)和序數牌(分為條子、餅子、萬子三種花色,每種花色各有一到九的九種牌),每種牌各四張。在麻將中,通常情況下一組和了的牌(即完成的牌)由十四張牌組成。十四張牌中的兩張組成對子(即完全相同的兩張牌),剩餘的十二張組成三張一組的四組,每一組須為順子(即同花色且序數相連的序數牌,例如條子的

三、四、五)或者是刻子(即完全相同的三張牌)。一組聽牌的牌是指一組十三張牌,且再加上某一張牌就可以組成和牌。那一張加上的牌可以稱為等待牌。在這裡,我們考慮一種特殊的麻將。在這種特殊的麻將裡,沒有字牌,花色也只有一種。但是,序數不被限制在一到九的範圍內,而是在1到n的範圍內。同時,也沒有每一種牌四張的限制。一組和了的牌由3m + 2張牌組成,其中兩張組成對子,其餘3m張組成三張一組的m組,每組須為順子或刻子。現給出一組3m + 1張的牌,要求判斷該組牌是否為聽牌(即還差一張就可以和牌)。如果是的話,輸出所有可能的等待牌。

思路:

列舉每一種牌是不是等待牌,每次判斷的時候,列舉對子,然後其他的能組成刻子就組成刻子,不能的話只能組成順子,按照這樣的原則去判斷。(注意,題目中沒有每一種牌只有4張的限制)

1 #include2

#define ios ios::sync_with_stdio(false);//

不可再使用scanf printf

3#define max(a, b) ((a) > (b) ? (a) : (b))//

禁用於函式,會超時

4#define min(a, b) ((a) < (b) ? (a) : (b))

5#define mem(a) memset(a, 0, sizeof(a))

6#define dis(x, y, x1, y1) ((x - x1) * (x - x1) + (y - y1) * (y - y1))

7#define mid(l, r) ((l) + ((r) - (l)) / 2)

8#define lson ((o)<<1)

9#define rson ((o)<<1|1)

10#define accepted 0

11#pragma comment(linker, "/stack:102400000,102400000")//

棧外掛程式12

using

namespace

std;

13 inline int

read()

1417

while (ch>='

0'&&ch<='9')

18return x*f;19}

20 typedef long

long

ll;21

const

int maxn = 2000 + 10;22

const

int mod = 1000000007;//

const引用更快,巨集定義也更快

23const

int inf = 1e9 + 7;24

const

double eps = 1e-6;25

inta[maxn];

26int

b[maxn];

27int

n, m;

28bool

judge()

2939

if(b[n - 1] >= 3)b[n - 1] %= 3;40

if(b[n] >= 3)b[n] %= 3;41

if(b[n - 1] == 0 && b[n] == 0)return

true;42

return

false;43

}44bool

ok()

4554 a[i] += 2;55

}56return

false;57

}58intmain()

5970

if(ans.size() == 0)puts("no"

);71

else

7278

return

accepted;

79 }

BZOJ 1177 Oil 特技列舉

對於三個正方形的位置一共有六種情況。預處理出 i,j 左上角,左下角,右上角,右下角區域內最大權值的正方形。列舉分界線更新答案。剛開始想了乙個錯誤的dp也是蠢啊。include include include include include include include include inclu...

BZOJ 1088 掃雷Mine 列舉初始狀態

題目大意 現在棋盤是n 2的,第一列裡面某些格仔是雷,而第二列沒有雷,如下圖 由於第一列的雷可能有多種方案滿足第二列的數的限制,你的任務即根據第二列的資訊確定第一列雷有多少種擺放方案。思路 只需要列舉第一行是否有雷就ok了。判斷的時候除了判斷相等,還要判斷每a個f i 範圍必須在0 1之間 1 in...

BZOJ 1295 最長距離 BFS 列舉

題目大意 windy有一塊矩形土地,被分為 n m 塊 1 1 的小格仔。有的格仔含有障礙物。如果從格仔a可以走到格仔b,那麼兩個格仔的距離就為兩個格仔中心的歐幾里德距離。如果從格仔a不可以走到格仔b,就沒有距離。如果格仔x和格仔y有公共邊,並且x和y均不含有障礙物,就可以從x走到y。如果windy...