ZOJ-1111
来源:互联网 发布:js base64转换为文件 编辑:程序博客网 时间:2024/06/06 06:45
巨繁琐的模拟。。写了我近两小时,蛋疼死了,各种比较规则,代码很丑,困死了睡觉去鸟。。
#include<cstdio>#include<algorithm>#include<vector>#include<cstring>#include<map>#include<string>using namespace std;namespace{int value(char c){if (c == 'T')return 10;else if (c == 'J')return 11;else if (c == 'Q')return 12;else if (c == 'K')return 13;else if (c == 'A')return 14;elsereturn c - '0';}bool cmp(const pair<int, char> &p1, const pair<int, char> &p2){return p1.first > p2.first;}bool isStraight(vector<pair<int, char> > &cards){int high = cards[0].first;return (cards[1].first == high - 1) && (cards[2].first == high - 2)&& (cards[3].first == high - 3) && (cards[4].first == high - 4);}bool isFlush(vector<pair<int, char> > &cards){return (cards[0].second == cards[1].second)&& (cards[0].second == cards[2].second)&& (cards[0].second == cards[3].second)&& (cards[0].second == cards[4].second);}pair<string, pair<int, int> > type(vector<pair<int, char> > &cards){int count[15];memset(count, 0, sizeof(count));for (size_t i = 0; i < cards.size(); i++)count[cards[i].first]++;bool four = false, three = false, pair = false, twopair = false;int first = 0, second = 0;for (int i = 2; i <= 14; i++){if (count[i] == 4){four = true;first = i;}if (count[i] == 3){three = true;first = i;}if (count[i] == 2){if (pair){twopair = true;first = i;}else{pair = true;second = i;}}}bool straight = isStraight(cards);bool flush = isFlush(cards);string res;if (four)res = "Four";else if (three && pair)res = "FullHouse";else if (three)res = "Three";else if (twopair)res = "TwoPairs";else if (pair)res = "Pair";else if (straight && !flush)res = "Straight";else if (!straight && flush)res = "Flush";else if (straight && flush)res = "SF";elseres = "HC";if (res == "TwoPairs")return make_pair(res,make_pair(max(first, second), min(first, second)));elsereturn make_pair(res, make_pair(first, second));}int compareSameType(string &type, pair<int, int> &bv, pair<int, int> &wv,vector<pair<int, char> > &black, vector<pair<int, char> > &white){if (type == "HC" || type == "Straight" || type == "Flush"|| type == "SF"){for (size_t i = 0; i < black.size(); i++)if (black[i].first != white[i].first)return black[i].first - white[i].first;return 0;}else if (type == "Pair"){if (bv.first != wv.first)return bv.first - wv.first;else{vector<int> b, w;for (size_t i = 0; i < black.size(); i++)if (black[i].first != bv.first)b.push_back(black[i].first);for (size_t i = 0; i < white.size(); i++)if (white[i].first != wv.first)w.push_back(white[i].first);for (size_t i = 0; i < b.size(); i++)if (b[i] != w[i])return b[i] - w[i];return 0;}}else if (type == "TwoPairs"){if (bv.first != wv.first)return bv.first - wv.first;else if (bv.second != wv.second)return bv.second - wv.second;else{int bb, ww;for (size_t i = 0; i < black.size(); i++)if ((black[i].first != bv.first)&& (black[i].first != bv.second))bb = black[i].first;for (size_t i = 0; i < white.size(); i++)if ((white[i].first != wv.first)&& (white[i].first != wv.second))ww = white[i].first;return bb - ww;}}else if (type == "Three" || type == "Four" || type == "FullHouse")return bv.first - wv.first;return 0;}}int main(){char card[3];vector<pair<int, char> > black;vector<pair<int, char> > white;map<string, int> mp;mp["HC"] = 1;mp["Pair"] = 2;mp["TwoPairs"] = 3;mp["Three"] = 4;mp["Straight"] = 5;mp["Flush"] = 6;mp["FullHouse"] = 7;mp["Four"] = 8;mp["SF"] = 9;while (scanf("%s", card) != EOF){black.clear();white.clear();black.push_back(make_pair(value(card[0]), card[1]));for (int i = 1; i < 5; i++){scanf("%s", card);black.push_back(make_pair(value(card[0]), card[1]));}for (int i = 0; i < 5; i++){scanf("%s", card);white.push_back(make_pair(value(card[0]), card[1]));}sort(black.begin(), black.end(), cmp);sort(white.begin(), white.end(), cmp);pair<string, pair<int, int> > b = type(black);pair<string, pair<int, int> > w = type(white);if (b.first != w.first)puts(mp[b.first] > mp[w.first] ? "Black wins." : "White wins.");else{string s = b.first;int result = compareSameType(s, b.second, w.second, black, white);if (result > 0)puts("Black wins.");else if (result < 0)puts("White wins.");elseputs("Tie.");}}return 0;}
0 0
- ZOJ-1111
- zoj 1111 Poker Hands
- zoj 1111 Poker Hands
- zoj 1111 Poker Hands
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- NPAPI——实现非IE浏览器的类似ActiveX的本地程序(插件)调用
- UVA 10106 (暑假-高精度-A - Product)
- J2SE基础:4.面向对象的特性一
- 在Ubuntu操作系统上安装mono和jexus搭建.NET的运行环境
- Hibernate注解插入有空字段实体映射类:实体类有空字段插入数据库时空属性插入为默认值
- ZOJ-1111
- DevExpress传统界面设计:ToolBar和工具条停靠控件、和popupMenu弹出菜单
- iOS 根据文本内容为TextView动态定义高度
- 《iOS 7 Programming Pushing the Limits》系列:你可能不知道的ObjC技
- 跟我学设计设计模式视频教程(一)-设计模式概述&单例模式
- NPAPI插件开发学习:插件中多个dll文件的打包
- iOS被忽略的main函数
- 安卓post get提交表单类
- PAT循环-09. 支票面额(15)