logo头像

往者不可谏,来者犹可追。

牛客-北邮-打牌

题目描述

牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌。 规则:出牌牌型有5种 [1]一张 如4 则5…9可压过 [2]两张 如44 则55,66,77,…,99可压过 [3]三张 如444 规则如[2] [4]四张 如4444 规则如[2] [5]五张 牌型只有12345 23456 34567 45678 56789五个,后面的比前面的均大。


输入描述:

输入有多组数据。
每组输入两个字符串(字符串大小不超过100)a,b。a字符串代表手中牌,b字符串代表处的牌。


输出描述:

压过输出YES 否则NO。


示例1

输入

12233445566677
33

输出

YES


分析

按照规则,分为两种况:一种是顺子,一种就是重复。

  1. 顺子时候。先将a串去重复。然后再初步判断第一张牌是否大于,大于时,再比较后四张牌。
  2. 重复。判断第一张牌是否大于,大于时,再比较b.length()长度的牌。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int main()
{
string a, b, c;
bool flags = false;
cin>>a>>b;
if(b.length()<5&&b.length()>0) {
for(int i = 0; i < a.length()-b.length()+1;i ++){
if(a[i]>b[0]){
for(int j = i; j <= i+b.length()-1; j ++){
if(a[j]>b[0]&&a[j]==a[i]){
flags = true;
}else {
flags = false;
break;
}
}
if(flags) break;
}
}
}else{
for(int i = 1;i < a.length(); i ++){
if(a[i]==a[i-1]){
a.erase(i,1);
i--;
}
}

for(int i = 0; i < a.length(); i ++){
if(a[i]>b[0]){
for(int j = 1; j < b.length(); j ++){
if(a[i+j]>b[j]&&a[i+j]-a[i+j-1]==1){
flags = true;
}
else {
flags = false;
break;
}
}
}
if(flags) break;
}
}

if(flags) cout<<"YES";
else cout<<"NO";
return 0;
}
上一篇