PTA basic 1039 到底买不买 (20 分) c++语言实现(g++)

小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。

为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。

figbuy.jpg

图 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 }

 

 
posted @ 2021-05-06 20:26  keiiha  阅读(71)  评论(0编辑  收藏  举报