NC54031. 小天当地主
描述
输入描述
输入格式:
输入文件包含多行行
第一行一个数字T--样例个数
接下来T行每行输入一个字符串s表示小天手上的牌。
【数据规模与约定】
规定|s|表示字符串s的长度
对于10%的数据,T=1,|s|<5
对于20%的数据,T<=10,|s|<5
对于50%的数据,T<=100,|s|<=15
对于100%的数据,T<=10000,|s|<=15
输出描述
输出格式:
输出文件包含多行
对每个样例输出一行
如果小天能以顺子一次出完输出"YES"
否则输出"NO"
示例1
输入:
1 890JQ
输出:
YES
说明:
8,9,10,J,Q是5张连牌示例2
输入:
1 8890JQ
输出:
NO
说明:
8,8,9,10,J,Q无法以顺子一次出完C++14(g++5.4) 解法, 执行用时: 28ms, 内存消耗: 504K, 提交时间: 2020-06-17 09:15:46
#include<bits/stdc++.h> using namespace std; void change(string &str,string a,string b) { int t; if((t=str.find(a))!=-1) str = str.replace(str.find(a),1,b); } int main() { string name="3456789EFGHI"; int T; cin>>T; while(T--) { string str; cin>>str; if(str.size()<5) puts("NO"); else { change(str,"0","E"); change(str,"J","F"); change(str,"Q","G"); change(str,"K","H"); change(str,"A","I"); sort(str.begin(),str.end()); if(name.find(str)!=-1) puts("YES"); else puts("NO"); } } return 0; }
Java(javac 1.8) 解法, 执行用时: 660ms, 内存消耗: 47648K, 提交时间: 2019-12-06 15:58:32
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String n = in.nextLine(); for (int i = 0; i < Integer.parseInt(n); i++) { String str = in.nextLine(); str = str.replace('0', 'I'); str = str.replace('K', 'R'); str = str.replace('A', 'S'); char[] cs = str.toCharArray(); Arrays.sort(cs); str = new String(cs); if (str.length() > 4 && "3456789IJQRS".contains(str)) { System.out.println("YES"); } else { System.out.println("NO"); } } } }
Python(2.7.3) 解法, 执行用时: 97ms, 内存消耗: 3308K, 提交时间: 2019-11-28 14:56:03
import sys def check(line): if len(line) < 5: return "NO" m = {'A':14, '2':115, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, '0':10, 'J':11, 'Q':12, 'K':13, 'N':116, 'M':117} values = [] for char in line: values.append(m[char]) values.sort() for i in range(1, len(values)): if values[i] - values[i-1] != 1: return "NO" return "YES" n = int(raw_input()) for i in range(n): line = raw_input() print check(line.strip())
Python3 解法, 执行用时: 136ms, 内存消耗: 4648K, 提交时间: 2022-04-30 21:57:06
s = ['3', '4', '5', '6', '7', '8', '9', '0', 'J', 'Q', 'K', 'A', '2', 'M', 'N'] t = int(input()) for i in range(t): w = input() r = 'YES' a = [s.index(j) for j in w] a.sort() if max(a) > 11: r = 'NO' if len(a) < 5: r = 'NO' for j in range(1, len(a)): if a[j - 1] + 1 != a[j]: r = 'NO' break print(r)
pypy3(pypy3.6.1) 解法, 执行用时: 358ms, 内存消耗: 25716K, 提交时间: 2019-12-07 01:08:53
no_lines = int(input()) cards = '3456789opqrs' def check_seq(line): line = line.replace('0','o').replace('J','p').replace('Q','q').replace('K','r').replace('A','s') line = ''.join(sorted(line)) if len(line) >= 5 and line in cards: print("YES") else: print("NO") for i in range(no_lines): line = input().strip() check_seq(line)