到底買不買

小紅想買些珠子做一串自己喜歡的珠串。賣珠子的攤主有很多串五顏六色的珠串,但是不肯把任何一串拆散了賣。於是小紅要你幫忙判斷一下,某串珠子裏是否包含了全部自己想要的珠子?如果是,那麼告訴她有多少多餘的珠子;如果不是,那麼告訴她缺了多少珠子。

爲方便起見,我們用[0-9]、[a-z]、[A-Z]範圍內的字符來表示顏色。例如在圖1中,第3串是小紅想做的珠串;那麼第1串可以買,因爲包含了全部她想要的珠子,還多了8顆不需要的珠子;第2串不能買,因爲沒有黑色珠子,並且少了一顆紅色的珠子。
這裏寫圖片描述
【輸入形式】

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

【輸出形式】

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

【樣例輸入】

ppRYYGrrYBR2258
YrR8RrY

【樣例輸出】

Yes 8


#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
    string str,strwant;
    cin>>str>>strwant;
    int len=str.length();
    int lenwant=strwant.length();
    int nwant[130]={0};//ASCII碼 
    int n[130]={0};
    for(int i=0;i<lenwant;i++)
    {
        int x=strwant[i];
        nwant[x]++;
    }
    for(int i=0;i<len;i++)
    {
        int x=str[i];
        n[x]++;
    }
    int flag=0,miss=0;
    for(int i=0;i<130;i++)
    {
        if(nwant[i]>n[i]&&nwant[i]!=0)
        {
            flag=1;
            miss=miss+abs(nwant[i]-n[i]);
        }
    }
    if(flag==1)
    {
        cout<<"No "<<miss<<endl;
    }
    else
    {
        int x=len-lenwant;
        cout<<"Yes "<<x<<endl;
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章