PatA1092To Buy or Not to Buy

whole pieces整件
题目大意:第一个字符串代表全部的面包
第二个是这个人人想买的面包,检查商店出售是否包含这个人全部
想要的
包含 yes 并且说明多买几个
不包含 no 说明错过几个
0-9 a-z A-Z代表颜色
注意条件:
1.人买的可能比商店卖的多
2.面包数量也要对上
3.利用负数代表差几个面包的时候,需要注意只有第一个字母有效
比如A hash值为-1,那么接下来的A的hash值不应该继续使用
题目思路:
1.首先将面包录入hash中 ,hashtable为ascii
2.商店卖的++,然后人买的–,若是都有,则最后人买的对于的hash值都是0,最后输出input.length-input_length
若有些卖完了,或者,没有,对应的hash值是负数
3.若hash值》0 代表足够继续检查下一个
若hash值<0 负几代表缺几个 并且应该把值置为0,代表后面碰到相同的字母不在累计

#include <iostream>
#include<string>
#include<stdlib.h>
#include<stdio.h>
#include<string>
//1092 To Buy or Not to Buy
/*
whole pieces整件 
题目大意:第一个字符串代表全部的面包
第二个是这个人人想买的面包,检查商店出售是否包含这个人全部
想要的
包含 yes 并且说明多买几个
不包含 no 说明错过几个
0-9 a-z A-Z代表颜色 
 
 注意条件: 
1.人买的可能比商店卖的多 
2.面包数量也要对上 
题目思路:
1.首先将面包录入hash中 ,hashtable为ascii
2.商店卖的++,然后人买的--,若是都有,则最后人买的对于的hash值都是0,最后输出input.length-input_length 
若有些卖完了,或者,没有,对应的hash值是负数 
3.若hash值》0 代表足够继续检查下一个
若hash值<0 负几代表缺几个 并且应该把值置为0,代表后面碰到相同的字母不在累计 
a97 A65
*/
using namespace std;
int main() {
   string input;
   string input_; 
   int hash[130]={0}; 
   getline(cin,input);
   getline(cin,input_);
   int i=0,j=0;
  while(i<input.length()||j<input_.length()) 
  {
  	if(i<input.length())
  	{
  		hash[input[i]]++;
  		i++;
	  }
	  if(j<input_.length())
	  {
	  	hash[input_[j]]--;
	  	j++;
	  }
  }
  int sum=0;
  bool flag=true; //代表可以买到 
  for( int i=0;i<input_.length();i++)
  {
  	if(hash[input_[i]]>=0)
  	{
  		continue;
	  }
	  else if(hash[input_[i]]<0)
	  {
	  	sum=sum-hash[input_[i]];
	  		hash[input_[i]]=0;
	  	flag=false;
	  }
  }
  if(flag)
  printf("Yes %d",input.length()-input_.length());
  else
  {
  	printf("No %d",sum);
  }
	system("pause");
	
}```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值