mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
115 lines
2.9 KiB
C++
115 lines
2.9 KiB
C++
|
#include<cstdio>
|
||
|
#include<cstdlib>
|
||
|
#include<cstring>
|
||
|
char a[1000];
|
||
|
char einput[1000]="JOKER";
|
||
|
int gnum(char x){
|
||
|
if(x == 'K') return 10;
|
||
|
if(x == 'Q') return 10;
|
||
|
if(x == 'J') return 10;
|
||
|
if(x == 'T') return 10;
|
||
|
if(x == 'A') return 1;
|
||
|
return int(x) - 48;
|
||
|
}
|
||
|
int len;
|
||
|
int p, d;
|
||
|
int tp, td;
|
||
|
int sum;
|
||
|
bool flagp, flagd;
|
||
|
bool ans;
|
||
|
int getp(int s, int t, bool flag){
|
||
|
int result = p;
|
||
|
for(int i = s; i <= t; i++){
|
||
|
if(a[i] == 'A')
|
||
|
flag = true;
|
||
|
result += gnum(a[i]);
|
||
|
}
|
||
|
if(result <= 11 && flag)
|
||
|
result += 10;
|
||
|
return result;
|
||
|
}
|
||
|
int getd(int s, int t, bool flag){
|
||
|
int result = d;
|
||
|
if(result >= 17)
|
||
|
return result;
|
||
|
if(flag && result <= 11 && result + 10 >= 17)
|
||
|
return result + 10;
|
||
|
for(int i = s; i <= t; i++)
|
||
|
if(result < 17){
|
||
|
if(a[i] == 'A')
|
||
|
flag = true;
|
||
|
result += gnum(a[i]);
|
||
|
if(flag && result <= 11 &result + 10 >= 17)
|
||
|
return result + 10;
|
||
|
}
|
||
|
else
|
||
|
return result;
|
||
|
return result;
|
||
|
}
|
||
|
int main(){
|
||
|
while(1){
|
||
|
memset(a, 0, sizeof(a));
|
||
|
fgets(a, 1000, stdin);
|
||
|
flagp = false;
|
||
|
flagd = false;
|
||
|
ans = false;
|
||
|
if(a[strlen(a) - 1] == '\n')
|
||
|
a[strlen(a) - 1] = '\0';
|
||
|
len = strlen(a);
|
||
|
if(strcmp(a, einput) == 0)
|
||
|
break;
|
||
|
p = gnum(a[0]) + gnum(a[2]);
|
||
|
d = gnum(a[1]) + gnum(a[3]);
|
||
|
if(a[0] == 'A')
|
||
|
flagp = true;
|
||
|
if(a[2] == 'A')
|
||
|
flagp = true;
|
||
|
if(a[1] == 'A')
|
||
|
flagd = true;
|
||
|
if(a[3] == 'A')
|
||
|
flagd = true;
|
||
|
if(len == 4){
|
||
|
if(flagp && p <= 11)
|
||
|
p += 10;
|
||
|
if(flagd && d <= 11)
|
||
|
d += 10;
|
||
|
if(p>=d)
|
||
|
printf("Yes\n");
|
||
|
else
|
||
|
printf("No\n");
|
||
|
}
|
||
|
else{
|
||
|
sum = p;
|
||
|
ans = false;
|
||
|
tp = p;
|
||
|
if(flagp && tp <= 11)
|
||
|
tp += 10;
|
||
|
td = getd(4, len-1, flagd);
|
||
|
if(tp <= 21)
|
||
|
if(tp >= td || td > 21)
|
||
|
{
|
||
|
ans = true;
|
||
|
}
|
||
|
for(int i = 4; i <= len - 1; i++){
|
||
|
if(ans)
|
||
|
break;
|
||
|
sum += gnum(a[i]);
|
||
|
if(sum > 21)
|
||
|
break;
|
||
|
tp = getp(4, i , flagp);
|
||
|
td = getd(i + 1, len -1, flagd);
|
||
|
if(tp <= 21)
|
||
|
if(tp >= td || td > 21){
|
||
|
ans = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if(ans)
|
||
|
printf("Yes\n");
|
||
|
else
|
||
|
printf("No\n");
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
}
|