Untitled
unknown
plain_text
2 years ago
4.2 kB
11
Indexable
#include <bits/stdc++.h> using namespace std; vector<string>players; vector<string>cards; string self; string trump; map<string,string>game; void getValue(string &key, string &value) { if(key == "players") { char* token = std::strtok(&value[0], ","); while (token != nullptr) { players.push_back(token); token = std::strtok(nullptr, ","); } } else if(key == "self") { self = value; } else if(key == "trump") { trump = value; } else if(key == "cards") { char* token = std::strtok(&value[0], ","); while (token != nullptr) { cards.push_back(token); token = std::strtok(nullptr, ","); } } else { game[key] = value; } } int compareCards(string& card1, string& card2) { std::string ranks = "2345678910jqka"; int value1 = ranks.find(card1.substr(1)); int value2 = ranks.find(card2.substr(1)); return value1>value2; // if (value1 > value2) { // return 1; // } else if (value1 < value2) { // return -1; // } else { // return 0; // } } string optimalCard() { string patner = players[1]; char leadSuit = game[players[0]][0]; vector<string>forcedToPalyCard; int winner = 0; string maxCard = game[players[0]]; // check 1-0 if(game[players[1]][0] == leadSuit) { winner = compareCards(game[players[1]],game[players[0]]); if(winner == 1) { maxCard = game[players[1]]; }else { winner = 0; } } else if(game[players[1]][0] == trump[0]) { winner = 1; maxCard = game[players[1]]; } if(game[players[2]][0] == leadSuit) { if(winner == 1) { if(game[players[1]][0] == leadSuit) { winner = compareCards(game[players[1]],game[players[2]]); if(winner == 1) { maxCard = game[players[1]]; } else { winner = 0; maxCard = game[players[2]]; } } } else { if(compareCards(game[players[2]],game[players[0]])) { maxCard = game[players[2]]; } } } else if(game[players[2]][0] == trump[0]) { if(winner == 1 ) { if(game[players[1]][0] == leadSuit) { winner = 0; maxCard = game[players[2]]; } else if(game[players[1]][0] == trump[0]) { if(compareCards(game[players[2]],game[players[1]])) { maxCard = game[players[2]]; winner = 0; } } } else { maxCard = game[players[2]]; } } for(auto card:cards) { if(card[0] == leadSuit) { forcedToPalyCard.push_back(card); } } if(forcedToPalyCard.size() == 0) { string ans = cards[0]; for(int i=1;i<cards.size();i++) { if(compareCards(ans,cards[i])){ ans = cards[i]; } } return ans; } string ans = forcedToPalyCard[0]; for(int i=1;i<forcedToPalyCard.size();i++) { if(compareCards(ans,forcedToPalyCard[i])){ ans = forcedToPalyCard[i]; } } if(winner)return ans; ans = ""; for(int i=0;i<forcedToPalyCard.size();i++) { if(compareCards(forcedToPalyCard[i], maxCard)){ ans = forcedToPalyCard[i]; } } return ans; } int main() { string s;cin>>s; int n = s.size(); string curr = ""; for(int i=0;i<n;i++) { // extract key int j = i; string key = ""; while(j<n && s[j] != ':') { key += s[j]; j++; } i = j+1; string value = ""; while(i<n && s[i] != ';') { value += s[i]; i++; } getValue(key,value); } cout<<optimalCard()<<endl; return 0; }
Editor is loading...