小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一
下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。
为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如,YrR8RrY是小红想做的珠串;那么ppRYYGrrYBR2258可以买,因为包含了
全部她想要的珠子,还多了8颗不需要的珠子;ppRYYGrrYB225不能买,因为没有黑色珠子,并且少了一颗红色的珠子。
输入描述:
每个输入包含1个测试用例。每个测试用例分别在2行中先后给出摊主的珠串和小红想做的珠串,两串都不超过1000个珠子。
输出描述:
如果可以买,则在一行中输出“Yes”以及有多少多余的珠子;如果不可以买,则在一行中输出“No”以及缺了多少珠子。其间以1个空格分隔。
示例1
输入
ppRYYGrrYBR2258 YrR8RrY
输出
Yes 8
定义的char结构直接写成字符串也行
#include<bits/stdc++.h>
using namespace std;
map<char,int>mpa,mpb;
char ss[62]={'0','1','2','3','4','5','6','7','8',
'9','a','b','c','d','e','f','g','h',
'i','j','k','l','m','n','o','p','q',
'r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I',
'J','K','L','M','N','O','P','Q','R',
'S','T','U','V','W','X','Y','Z'};
int main(){
string a,b;
cin>>a>>b;
for(int i=0;i<a.size();i++){
mpa[a[i]]++;
}
for(int i=0;i<b.size();i++){
mpb[b[i]]++;
}
int cnt1=0,cnt2=0;//多与少的计算
int flag=1;
for(int i=0;i<62;i++){
if(mpb[ss[i]]<=mpa[ss[i]]){
cnt1+=mpa[ss[i]]-mpb[ss[i]];
continue;
}else{
flag=0;
cnt2+=mpb[ss[i]]-mpa[ss[i]];
continue;
}
}
if(flag){
printf("Yes %d\n",cnt1);
}else{
printf("No %d\n",cnt2);
}
return 0;
}