题目描述:
小明开了一家水果店,出售A、B两种水果。
他每天准备n个水果,其中A、B的数量不定。每天会有n个客人来购买,客人也分为两类,X类客人只买A水果,Y类客人AB两种水果都可。
每当有客人来时,小明会随机从水果篮中取出水果。如果来的是X类客人,但是取出的是B类水果,那么就将取出的B放到一边的盘子里,直到取出A才会卖给X类客人。如果是Y类客人前来购买,当盘子里有B时优先将B售卖给Y,如果没有,就直接将水果篮里取出的水果卖给Y。
小明想知道,他每天准备的水果,能不能满足所有客人的需求。
输入:
输入三行数据。
第一行输入1个正整数n(1<=n<=100),表示每天准备的水果数量。
第二行输入一行长度为n,由字母AB组成的字符串,表示小明从水果篮中取出水果的顺序。
第三行输入一行长度为n,由字母X和Y组成的字符串,表示客人到店的顺序。
输出:
如果当天的水果能满足所有客人的需求,输出”YES”,否则输出”NO”。
样例输入:
5 ABBAA YXXXY
样例输出:
NO
代码如下:
#include <stdio.h>
int main(){
int n,num_x=0,num_y=0,flag;
int i,j,k;
char fruits,people;
//x只a,b放一边
//y都可,优先b
scanf("%d",&n);
getchar();
char fruit[n];
for(i=0;i<n;i++){
fruits=getchar();
if(fruits=='A'){
fruit[i]=1;
}
if(fruits=='B'){
fruit[i]=2;
}
}
getchar();
for(i=0;i<n;i++){
people=getchar();
if(people=='X')flag=1;
else flag=2;
for(j=0;j<n;j++){
//先判断X
if(flag==fruit[j]&&flag==1) {
fruit[j]=0;
num_x++;
break;
}
//再判断Y
if(flag==2){
for(k=0;k<n;k++){
if(fruit[k]==2){
fruit[k]=0;
num_y++;
break;
}
if(fruit[k]==1){
fruit[k]=0;
num_y++;
break;
}
}
break;
}
}
}
if(num_x+num_y!=n)printf("NO\n");
else printf("YES\n");
return 0;
}