AcWing 1582. 买还是不买
原题链接
简单
作者:
eveer
,
2021-08-28 11:20:07
,
所有人可见
,
阅读 224
#include<bits/stdc++.h>
using namespace std;
const int N=100;//颜色的种类数设置为100,数字范围0-9,小写字母范围10-35,大写字母范围36-61
bool shoph[N];//记录店家有哪些颜色
int shopn[N];//记录店家每种颜色的数量
int cush[N];//记录用户需要哪些颜色
int main()
{
string shop,user;
cin>>shop>>user;
for(int i=0;i<shop.size();i++)
{
if(shop[i]>='0'&&shop[i]<='9')//表明输入的是数字
{
int loc=shop[i]-'0';
shoph[loc]=true;
shopn[loc]++;
}
if(shop[i]>='a'&&shop[i]<='z')//表明输入的是小写字母
{
int loc=shop[i]-'a'+10;
shoph[loc]=true;
shopn[loc]++;
}
if(shop[i]>='A'&&shop[i]<='Z')//表明输入的是大写字母
{
int loc=shop[i]-'A'+36;
shoph[loc]=true;
shopn[loc]++;
}
}
int less_cnt=0;//记录用户在这个店里面缺失的颜色数量,如果确实数量不等于0,表明在这家店买不到所有的颜色,则返回N0
for(int i=0;i<user.size();i++)
{
if(user[i]>='0'&&user[i]<='9')//表明输入的是数字
{
int loc=user[i]-'0';
if(shoph[loc]==true)//表明这家店存在这个颜色
{
shopn[loc]--;//将这种颜色的数量减去1
if(shopn[loc]==0)//如果这家店的这个颜色已经被用户取完了,则表明已经不存在这个颜色了
shoph[loc]=false;
}
else//如果这家店不存在这个颜色,则要记录下缺失的数量
less_cnt++;
}
if(user[i]>='a'&&user[i]<='z')//表明输入的是小写字母
{
int loc=user[i]-'a'+10;
if(shoph[loc]==true)//表明这家店存在这个颜色
{
shopn[loc]--;//将这种颜色的数量减去1
if(shopn[loc]==0)//如果这家店的这个颜色已经被用户取完了,则表明已经不存在这个颜色了
shoph[loc]=false;
}
else//如果这家店不存在这个颜色,则要记录下缺失的数量
less_cnt++;
}
if(user[i]>='A'&&user[i]<='Z')//表明输入的是大写字母
{
int loc=user[i]-'A'+36;
if(shoph[loc]==true)//表明这家店存在这个颜色
{
shopn[loc]--;//将这种颜色的数量减去1
if(shopn[loc]==0)//如果这家店的这个颜色已经被用户取完了,则表明已经不存在这个颜色了
shoph[loc]=false;
}
else//如果这家店不存在这个颜色,则要记录下缺失的数量
less_cnt++;
}
}
if(less_cnt!=0)//说明存在缺失值
printf("No %d",less_cnt);
else//不存在缺失值
{
printf("Yes ");
int user_cnt=0;
for(int i=0;i<100;i++)//遍历商家的每一种颜色,看其中存在的颜色,并统计其数量
{
if(shoph[i]==true)//表明店家有这种颜色剩余
user_cnt+=shopn[i];
}
printf("%d",user_cnt);
}
return 0;
}