NC54662. 俏兔子大战傻贼鹰-Easy Version
描述
输入描述
有多组数据,每组数据第一行是,表示这一局傻贼鹰对你询问了N次。第二行是一个大写字母(T:表示筒(饼),S:表示索(条),W:表示万),用来表示定缺牌。接下来N行每行一个字符串用来表示询问是否能胡的14张牌的信息。
比如:1W1W2W2W1T1T3T3T5T5T6T6T9T9T
表示:一万一万二万二万一筒一筒三筒三筒五筒五筒六筒六筒九筒九筒
输出描述
对于傻贼鹰的每一次询问,如果能胡牌输出Yes,不能胡牌输出No。
示例1
输入:
5 S 1W1W2W2W1T1T3T3T5T5T6T6T9T9T 1W1W2W2W1T1T3T3T5T5T6T6T9S9S 8T9T1W3W4W5T8T2W8T9T5T5T5W6W 1W2W2W1W3W3W3W9S1W1W2W2W3W9S 3W3W3W5W5W5W6W6W6W7W7W9W9W9W 1 T 2W3W1W1S2S2W2W3W2S1W1W3W1S1S
输出:
Yes No No No Yes Yes
C(clang 3.9) 解法, 执行用时: 1ms, 内存消耗: 364K, 提交时间: 2019-11-17 15:47:43
#include<stdio.h> #include<string.h> int main() { int i,j,k,n,a,s2,s3,add,no; char cha,c; int p[12][7]; char s[30]; while(scanf("%d\n%c",&n,&cha)!=EOF) { no=(int)cha-82; for(i=1;i<=n;i++) { memset(p,0,sizeof(p)); s2=s3=0; scanf("%s",s); for(j=0;j<=26;j=j+2) { p[s[j]-48][s[j+1]-82]++; p[0][s[j+1]-82]++; if(p[0][no]>0)break; if(p[s[j]-48][s[j+1]-82]==2)s2++; else if(p[s[j]-48][s[j+1]-82]==3){s2--;s3++;} } if(p[0][no]>0)printf("No\n"); else{ if(s2==7||(s3==4&&s2==1))printf("Yes\n"); else printf("No\n"); }} } }
Ruby(2.4.2) 解法, 执行用时: 48ms, 内存消耗: 8604K, 提交时间: 2019-11-17 16:30:00
until STDIN.eof? N = gets.to_i T = gets.chomp N.times do set = Hash.new set.default = 0 str = gets.chomp i = 0 while i < 28 set[str[i..(i + 1)]] += 1 i += 2 end # STDERR.puts "#{set}" if str.include? T puts "No" elsif set.size == 7 succ = true set.each_value do |x| succ = false unless x == 2 end if succ puts "Yes" else puts "No" end elsif set.size == 5 k = 0 d = 0 set.each_value do |x| k += 1 if x == 3 d += 1 if x == 2 end if k == 4 and d == 1 puts "Yes" else puts "No" end else puts "No" end end end
Python3(3.5.2) 解法, 执行用时: 21ms, 内存消耗: 3284K, 提交时间: 2019-11-17 16:47:54
def test(s,lost): if lost in s: return "No" mdict={} for i in range(0,len(s)-1,2): if s[i:i + 2] not in mdict: mdict[s[i:i + 2]] = 1 else: mdict[s[i:i + 2]] += 1 L=list(mdict.values()) L.sort() l1=[2,3,3,3,3] l2=[2,2,2,2,2,2,2] if L==l1 or L==l2: return "Yes" else:return "No" while True: try: N=int(input()) lost=input() L1=[] for i in range(N): L1.append(input()) for i in L1: print(test(i,lost)) except:break
C++(clang++11) 解法, 执行用时: 3ms, 内存消耗: 408K, 提交时间: 2020-11-25 09:45:35
#include<bits/stdc++.h> using namespace std; int main() { int n; char c; while(cin>>n) { cin>>c; for(int i=0; i<n; i++) { int f[256]= {},h[3000]= {0}; int a; char d; for(int k=0; k<14; k++) { cin>>a>>d; f[d]=1; h[a*d]++; } int cn[15]={}; if(f[c]){ puts("No"); continue; } for(int k=1;k<3000;k++) cn[h[k]]++; if(cn[2]*2+cn[4]*4==14||cn[3]==4&&cn[2]==1)puts("Yes"); else puts("No"); } } return 0; }