列表

详情


NC54662. 俏兔子大战傻贼鹰-Easy Version

描述

麻蛇更,麻蛇更,麻蛇不更麻蛇羹,麻蛇更麻蛇也羹。 
傻贼鹰今天到兔子家做客因为傻贼鹰听说兔子家的四川省四川大学是一所双流一大学,还有很多漂亮的俏兔子。你作为四川大学英语最好的最俏的俏兔子,被安排接待傻贼鹰。傻贼鹰来到四川大学被四川大学ACM集训队的兔子拉着打四川麻将,由于傻贼鹰实在学不会麻将,现在兔子们决定
简化一下规则: 
1、只有条(索)、筒(饼)、万三种牌共108张每种牌36张(一二三四五六七八九各4张),没有花、风牌和箭牌。 
2、必须缺一门可胡且开局确定缺哪一门,即胡牌的时候不能有三种花色的牌。 
3、不允许鸣牌(吃碰杠) 
4、刻子:三张同样的牌如(一筒一筒一筒) 
5、一对将:两张完全相同的牌如(一条一条) 
胡牌规则: 
1、对对胡:四副刻子加一对将 
2、七对子:七对一模一样的牌(缺索:一万一万二万二万一筒一筒三筒三筒五筒五筒六筒六筒九筒九筒) 
即使简化了规则,傻贼鹰还是学不会,所以就求你告诉他是不是能胡牌,如果能胡牌你就要用你那专业的英语告诉他Yes,不能胡牌你就要告诉他No

输入描述

有多组数据,每组数据第一行是,表示这一局傻贼鹰对你询问了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;
}

上一题