PTA basic 1039 到底买不买 (20 分) c++语言实现(g++)
小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。
为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。
图 1
输入格式:
每个输入包含 1 个测试用例。每个测试用例分别在 2 行中先后给出摊主的珠串和小红想做的珠串,两串都不超过 1000 个珠子。
输出格式:
如果可以买,则在一行中输出 Yes
以及有多少多余的珠子;如果不可以买,则在一行中输出 No
以及缺了多少珠子。其间以 1 个空格分隔。
输入样例 1:
ppRYYGrrYBR2258
YrR8RrY
输出样例 1:
Yes 8
输入样例 2:
ppRYYGrrYB225
YrR8RrY
输出样例 2:No 2
解题思路
1.使用ascii码字典,生成字典,在这里使用一个129大小的初始值为0的数组,然后遍历字符串统计各个符号的数量
2.使用卖家各个符号的供应量减去买家对应符号的需求量,得出的结果如果是正值 说明供应大于需求,在 "多余的珠子变量remain" 累加正值,
如果相减的结果是负值,说明供应量少于需求量,在"缺少的珠子needmore"累减负值
temp>=0?remain+=temp:needmore-=temp;
3.如果needmore大于0,说明有缺少的珠子,输出no和needmore,否则输出yes和remain
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 using namespace std; 5 int main(){ 6 string supplystr; 7 string needstr; 8 vector<int>supply(129,0); 9 vector<int>need(129,0); 10 11 int i=0,temp,remain=0,needmore=0; 12 char n,m; 13 cin >> supplystr; 14 cin >> needstr; 15 for(i=0;i<supplystr.size();i++){ 16 supply[static_cast<int>(supplystr[i])]+=1; 17 } 18 for(i=0;i<needstr.size();i++){ 19 need[static_cast<int>(needstr[i])]+=1; 20 } 21 22 for(i=0;i<129;i++){ 23 temp=supply[i]-need[i]; 24 temp>=0?remain+=temp:needmore-=temp; 25 } 26 if(needmore>0){ 27 cout <<"No " << needmore<<endl; 28 }else{ 29 cout <<"Yes " << remain<<endl; 30 } 31 return 0; 32 }