1039. 到底买不买(20)
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。
为方便起见,我们用[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
实现代码:
#include <iostream> #include <string> #define Max 1010 using namespace std; int main(int argc, char const *argv[]) { int A[26]={0},a[26]={0},num[10]={0},count=0; char c; bool flag = true; string str; cin>>str; for (int i = 0; i < str.size(); ++i) { if (str[i]>='0'&&str[i]<='9') { num[str[i]-'0']++; }else if (str[i]>='a'&&str[i]<='z') { a[str[i]-'a']++; }else if (str[i]>='A'&&str[i]<='Z') { A[str[i]-'A']++; } } cin>>str; for (int i = 0; i < str.size(); ++i) { if (str[i]>='0'&&str[i]<='9') { num[str[i]-'0']--; if (num[str[i]-'0']<0) { flag = false; } }else if (str[i]>='a'&&str[i]<='z') { a[str[i]-'a']--; if (a[str[i]-'a']<0) { flag = false; } }else if (str[i]>='A'&&str[i]<='Z') { A[str[i]-'A']--; if (A[str[i]-'A']<0) { flag = false; } } } if (flag) { for (int i = 0; i < 10; ++i) { count+=num[i]; } for (int i = 0; i < 26; ++i) { count+=a[i]; } for (int i = 0; i < 26; ++i) { count+=A[i]; } printf("Yes %d\n",count); }else{ for (int i = 0; i < 10; ++i) { if (num[i]<0) { count+=num[i]; } } for (int i = 0; i < 26; ++i) { if (a[i]<0) { count+=a[i]; } } for (int i = 0; i < 26; ++i) { if (A[i]<0) { count+=A[i]; } } count *= (-1); printf("No %d\n",count); } return 0; }