BZOJ 1028 JSOI 2007 麻将 贪心

题目大意

给出一种简化的麻将游戏规则,给出一副牌,问是否听牌,如果听,听那些张。

思路

一开始图样,,写搜索,果断T了。 其实就是一个显然的贪心。枚举听哪张牌,加进来,然后枚举最后剩下的雀头,对剩下的牌尽量组成m个顺子或者对子就行了。这时候我们从左往右扫,能够组成对子的就形成对子,不能的就和后面组成顺子。遇到小于0的就退出就好了。

CODE;int cnt, m;int src[MAX];int num[410];int ans[MAX], total;inline bool Judge(){static int arr[MAX];for(int i = 1; i <= cnt + 2; ++i)arr[i] = num[i];for(int i = 1; i <= cnt + 2; ++i) {if(arr[i] < 0) return false;arr[i] %= 3;arr[i + 1] -= arr[i];arr[i + 2] -= arr[i];}return true;}int main(){cin >> cnt >> m;for(int i = 1; i <= 3 * m + 1; ++i)scanf(“%d”, &src[i]);for(int i = 1; i <= cnt; ++i) {src[3 * m + 2] = i;memset(num, 0, sizeof(num));for(int j = 1; j <= 3 * m + 2; ++j)++num[src[j]];for(int j = 1; j <= cnt; ++j)if(num[j] >= 2) {num[j] -= 2;if(Judge()) {ans[++total] = i;break;}num[j] += 2;}}if(!total)puts(“NO”);for(int i = 1; i <= total; ++i)printf(“%d%c”, ans[i], ” \n”[i == total]);return 0;}

一定要记得挺身而出,即便帮不了忙,安慰也是最大的支持.

BZOJ 1028 JSOI 2007 麻将 贪心

相关文章:

你感兴趣的文章:

标签云: