PAT-B 1039 到底買不買【對映】

Enjoy_process發表於2019-02-23

                                                PAT-B 1039 到底買不買

                       https://pintia.cn/problem-sets/994805260223102976/problems/994805283241443328

 

 

題目

小紅想買些珠子做一串自己喜歡的珠串。賣珠子的攤主有很多串五顏六色的珠串,但是不肯把任何一串拆散了賣。於是小紅要你幫忙判斷一下,某串珠子裡是否包含了全部自己想要的珠子?如果是,那麼告訴她有多少多餘的珠子;如果不是,那麼告訴她缺了多少珠子。為方便起見,我們用[0-9]、[a-z]、[A-Z]範圍內的字元來表示顏色。例如在圖1中,第3串是小紅想做的珠串;那麼第1串可以買,因為包含了全部她想要的珠子,還多了8顆不需要的珠子;第2串不能買,因為沒有黑色珠子,並且少了一顆紅色的珠子。

figbuy.jpg

圖 1

輸入

每個輸入包含 1 個測試用例。每個測試用例分別在 2 行中先後給出攤主的珠串和小紅想做的珠串,兩串都不超過 1000 個珠子。

輸出

如果可以買,則在一行中輸出 Yes 以及有多少多餘的珠子;如果不可以買,則在一行中輸出 No 以及缺了多少珠子。其間以 1 個空格分隔。

樣例輸入

ppRYYGrrYBR2258
YrR8RrY

樣例輸出

Yes 8

分析

使用陣列統計兩個字串中各個字元出現的次數即可,具體看程式。

C++程式

#include<iostream>

using namespace std;

int num1[200];//num[i]記錄ASCII碼為i的字元出現的次數(攤主)
int num2[200];//小紅

int main()
{
	char ch;
	bool flag=true;
	int sum1=0,sum2=0,ans=0;//sum1記錄字串1的長度,sum2記錄字串2的長度 
	while((ch=getchar())!='\n') num1[ch]++,sum1++;//攤主 
	while((ch=getchar())!='\n') num2[ch]++,sum2++;//小紅 
	for(int i=1;i<200;i++)
	  if(num1[i]<num2[i])
	  {
	  	flag=false;//不能買
		ans+=num2[i]-num1[i];//差的數量 
	  }
	if(flag)
	  printf("Yes %d\n",sum1-sum2);
	else
	  printf("No %d\n",ans);
	return 0;
} 

 

相關文章