3.19 到底买不买

文章目录


前言

小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。

为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。
在这里插入图片描述

【输入形式】

每个输入包含1个测试用例。每个测试用例分别在2行中先后给出摊主的珠串和小红想做的珠串,两串都不超过1000个珠子。

【输出形式】

如果可以买,则在一行中输出“Yes”以及有多少多余的珠子;如果不可以买,则在一行中输出“No”以及缺了多少珠子。其间以1个空格分隔。

【样例输入】

ppRYYGrrYBR2258
YrR8RrY

【样例输出】

Yes 8

【样例说明】
【评分标准】

答案

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string s1,s2;
	cin>>s1;
	cin>>s2;
	int len=s1.length(); 
	/*	map<string,int>mp1
		map<string,int>mp2
		for(int i=0;i<s1.length();i++)
		{
			mp1[s[i]]++;
		}
		for(int i=0;i<s2.length();i++)
		{
			mp2[s[i]]++;
		}	*/
	int flag=0,p,queshao_sum=0; 
	for(int i=0; i<s2.length(); i++)
	{
		if(s1.find(s2[i])==string::npos)
		{
			flag=1;
			queshao_sum++;
		}
		else
		{
			p=s1.find(s2[i]);     //一举两得,存在的珠子找到一次删一次,数量不够时就找不见
			                     //则queshao_sum++ 
			s1.erase(p,1);
		}
	}
		if(flag==1)
			cout<<"No "<<queshao_sum;
		else
			cout<<"Yes "<<(len-s2.length());
	
	return 0;
}

第二种

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string s1,s2;
	cin>>s1;
	cin>>s2;
	int len=s1.length(); 
	/*	map<string,int>mp1
		map<string,int>mp2
		for(int i=0;i<s1.length();i++)
		{
			mp1[s[i]]++;
		}
		for(int i=0;i<s2.length();i++)
		{
			mp2[s[i]]++;
		}	*/
	int flag=0,p,queshao_sum=0; 
	for(int i=0; i<s2.length(); i++)
	{
		if(s1.find(s2[i])==string::npos)
		{
			flag=1;
			queshao_sum++;
		}
		else
		{
			p=s1.find(s2[i]);     //一举两得,存在的珠子找到一次删一次,数量不够时就找不见
			                     //则queshao_sum++ 
			s1.erase(p,1);
		}
	}
		if(flag==1)
			cout<<"No "<<queshao_sum;
		else
			cout<<"Yes "<<(len-s2.length());
	
	return 0;
}
#include<bits/stdc++.h>
using namespace std;



int main()
{
	string a,b;
	cin>>a>>b;
	map<char,int>mp;
	string ans="Yes";
	int cha=0;
   int flag=1;
	for(int i=0; i<a.length(); i++) 	mp[a[i]]++;

	for(int i=0; i<b.length(); i++)
	{
		if(!mp.count(b[i]))
		{
			ans="No";
			cha++;  //没有的珠子 个数
			flag=0;
		}
		else
		{
			mp[b[i]]--;
			if(mp[b[i]]<0)
			{
				flag=0;
				cha++;
			}
		}
	}
/*
	for(int i=0; i<b.length(); i++)
	{                                           这里搞得太麻烦了,以至于出错 
		if(ans=="Yes")
		{
			
			if(mp[b[i]]<0)
			{
				ans="No";
				cha-=mp[b[i]];  //有珠子数量不对
				flag=0;
			}
			
		}
		else
		{
			if(mp[b[i]]<0)
			{
				cha-=mp[b[i]];
			}

		}

	}
*/
	if(flag==1) cha=a.length()-b.length();  //多的珠子
			
	cout<<ans<<" "<<cha<<endl;
	return 0;
}



//借鉴代码 karl 
#include<iostream>
#include<string>
using namespace std;

int main()
{
    string from,need;//from是店家的珠子,need是我们需要的珠子
    cin>>from>>need;
    for(int i=0;i<from.size();i++)//遍历店家的珠子
    {
        int pos=need.find(from[i]);
        //判断店家的这颗珠子我们是否需要
        if(pos!=string::npos)//如果需要的话
        {
            from.erase(from.find(need[pos]),1);
            //在店家的珠子中删去
            need.erase(pos,1);
            //在我们需要的珠子中删去
            i--;
            //这里要人为将i向前一位
            //因为erase之后i到了下一个位置
        }
    }
    //根据需要的珠子的个数进行判断并输出
    if(need.empty()) cout<<"Yes "<<from.size()<<endl;
    else cout<<"No "<<need.size()<<endl;
    system("pause");
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Protocol3.19是一个通信协议,它定义了在计算机网络中,两个或多个通信实体之间进行数据交换的规则和格式。它是网络通信中非常重要的一部分,用于确保数据的可靠传输和正确解析。 Protocol3.19的设计和功能旨在提供高效的数据传输和通信协议,以满足各种不同的网络需求和应用场景。它可以应用于局域网和广域网的通信,以确保网络中的多个设备能够共享和传输数据。 Protocol3.19通过定义数据包的格式和结构,确保数据在网络中的传输是可靠的和有序的。它规定了数据包的起始和结束标志,以及数据包中包含的信息和校验机制,以防止数据的损坏或丢失。同时,它还定义了数据传输的流程和顺序,以确保数据能够按照正确的顺序到达目标设备。 Protocol3.19还提供了一些基本的网络服务,例如连接的建立和维护、数据的分片和重组、错误的检测和处理等。这些功能和服务能够帮助网络应用程序实现高效的数据传输和通信。 总之,Protocol3.19是一个重要的通信协议,用于确保计算机网络中数据的可靠传输和正确解析。它定义了数据包的格式、流程和校验机制,以及一些基本的网络服务,为网络通信提供了必要的规范和支持。 ### 回答2: Protocol 3.19是指一种通信协议,它用于在计算机网络中进行数据传输。这个协议规定了数据的格式,传输的方式,以及错误检测和修复等方面的内容。 Protocol 3.19采用了一种面向连接的通信方式。在建立连接之前,通信双方需要进行握手过程,以确保彼此都可以正常通信。握手过程中,会协商加密算法、传输速率、数据压缩等参数。 一旦连接建立成功,通信双方就可以开始传输数据。根据Protocol 3.19的规定,数据会被分割成小块,然后用数据包的形式进行传输。在传输过程中,每个数据包都会被赋予一个顺序编号,以确保数据的顺序正确。 为了保证数据的可靠性,Protocol 3.19引入了错误检测和修复机制。在每个数据包中,会附带一些校验码,用来检测数据是否出现错误。如果发现有错误出现,接收方可以向发送方请求重传数据。 此外,Protocol 3.19还支持多路复用和分包装等高级功能。多路复用允许同时传输多个数据流,提高了传输效率。分包装则使得大数据可以被分割成多个数据包进行传输,降低了传输的风险。 总的来说,Protocol 3.19是一种用于计算机网络中数据传输的通信协议。它采用了面向连接的通信方式,并且支持错误检测和修复,多路复用,分包装等功能。通过遵循Protocol 3.19的规定,通信双方可以实现高效、可靠的数据传输。 ### 回答3: protocol3.19是一个协议的版本号,用于标识和指定协议的特定版本。在计算机网络和通信中,协议是一种规定了数据交换和通信行为的约定。协议3.19是该协议的第三个版本,表示在之前的版本上进行了更新和改进。 协议3.19可能包含了一些新的功能、修复了之前版本的一些错误和漏洞,或者对原有功能进行了优化和增强。新的版本可能会引入新的特性,或在原有协议的基础上提供更好的性能和安全性。 协议3.19的使用需要各方的共同遵守和实施,以确保数据的准确传输和有效通信。协议3.19通常由网络设备、软件应用和系统之间的通信双方共同支持。在双方都遵守该协议的前提下,才能实现数据的正确解析和交换。 使用协议3.19的好处在于,通过不断升级和改进,可以提供更可靠、高效和安全的通信方式。协议版本的标识也方便了双方在通信过程中进行识别和判断,从而更好地进行数据交换和处理。 总之,protocol3.19是一个用于标识和指定协议特定版本的标识符。它代表该协议的第三个版本,可能包含了更新、改进和优化,有助于提高通信的可靠性和效率。它需要双方共同遵守和实施,才能实现准确的数据传输和有效的通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值