1039 到底买不买 (20 分)
题目链接
算法分析
读入两条链子的珠子信息,用ca和cb数组存下来,然后再从头到尾跑一次第二条链子,注意以下几点:
1.每一种珠子只计算一次。
2.对于某一种珠子,如果第一条个数大于等于第二条,sum加上第二条中的个数,如果第一条个数小于第二条,sum加上第一条中的个数。
3.最后进行判断,如果sum恰好等于第二条中的个数,说明恰好能满足要求,如果sum小于第二条的个数(不可能大于),那lenb-sum即为缺少的珠子个数。
代码实现
#include<bits/stdc++.h>
#define N 300
using namespace std;
int ca[N], cb[N];
int judge[N];
int main(){
string a, b;
cin>> a>> b;
int lena = a.size();
int lenb = b.size();
for(int i = 0; i < lena; ++ i)
ca[a[i]] ++;
for(int i = 0; i < lenb; ++ i)
cb[b[i]] ++;
int sum = 0;
for(int i = 0; i < lenb; ++ i)
if(!judge[b[i]]){
judge[b[i]] = 1;
if(ca[b[i]] >= cb[b[i]])
sum += cb[b[i]];
else{
sum += ca[b[i]];
}
}
if(sum == lenb){
printf("Yes %d", lena - lenb);
}
else{
printf("No %d", lenb - sum);
}
return 0;
}