sicily-1194. Message Flood

本文介绍了一道关于处理大量新年祝福短信的算法题。题目要求编写程序帮助主角计算还需发送祝福短信的朋友数量,通过对比朋友名单和已收短信名单实现。文章提供了使用二分查找和排序解决该问题的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1194. Message Flood


限制条件
时间限制: 1 秒, 内存限制: 32 兆

题目描述

Well, how do you feel about mobile phone? Your answer would probably be something like that “It’s so convenient and benefits people a lot”. However, if you ask Merlin this question on the New Year’s Eve, he will definitely answer “What a trouble! I have to keep my fingers moving on the phone the whole night, because I have so many greeting messages to send! ”. Yes, Merlin has such a long name list of his friends, and he would like to send a greeting message to each of them. What’s worse, Merlin has another long name list of senders that have sent message to him, and he doesn’t want to send another message to bother them (Merlin is so polite that he always replies each message he receives immediately). So, before he begins to send messages, he needs to figure to how many friends are left to be sent. Please write a program to help him.

Here is something that you should note. First, Merlin’s friend list is not ordered, and each name is alphabetic strings and case insensitive. These names are guaranteed to be not duplicated. Second, some senders may send more than one message to Merlin, therefore the sender list may be duplicated. Third, Merlin is known by so many people, that’s why some message senders are even not included in his friend list.


输入格式

There are multiple test cases. In each case, at the first line there are two numbers n and m (1<=n, m<=20000), which is the number of friends and the number of messages he has received. And then there are n lines of alphabetic strings (the length of each will be less than 10), indicating the names of Merlin’s friends, one per line. After that there are m lines of alphabetic strings, which are the names of message senders.

The input is terminated by n=0.



输出格式

For each case, print one integer in one line which indicates the number of left friends he must send.


样例输入
5 3
Inkfish
Henry
Carp
Max
Jericho
Carp
Max
Carp
0


样例输出
3

 

题目来源
ZSUACM Team Member

 

这道题由多组数据,每组数据第一行输入为n,m(0<=n,m <=20000),其中n为朋友的个数,m为收到短信的条数,接下来有n+m个名字,求剩下的朋友的个数。

思路比较简单,用二份查找和 sort排序就行。下面是代码

//1194. Message Flood
//2016.12.07

#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
#include <cstdlib>

using namespace std;

string name[20005];  // 存储朋友名字 
bool send[20005];   // 判断是否有短信 
string tmp;        // 发了短信的名字 
int n,m;

bool binary()      // 二分查找 
{
	int begin,mid,end;
	begin = 0;
	end = n-1;
	while(begin<=end)
	{
		mid = (begin+end)/2;
		if(tmp == name[mid])
		{
			if(!send[mid])
			{
				send[mid]=true;
				return true;
			}
			else
				return false;
		}
		else if(tmp < name[mid])
			end = mid-1;
		else
			begin = mid+1;
	}
	return false;
}

bool cmp(string a,string b)
{
	return a < b;
}

int main()
{
	while(cin>>n && n!=0)
	{
		memset(send,false,sizeof(send));
		cin>>m;
		for(int i=0;i<n;i++)
		{
			cin>>name[i];
			for(int j=0;j<name[i].length();j++)
			{
				name[i][j] = tolower(name[i][j]);     //大写转换小写 
			}
			
			
		}
		
		int cnt = n;
		sort(name,name+n,cmp);
			
		for(int i=0;i<m;i++)
		{
			cin>>tmp;
			for(int j=0;j<tmp.length();j++)
			{
				tmp[j] = tolower(tmp[j]);
			}
			if(binary())
				cnt--;
		}
		cout<<cnt<<endl;
	}
	return 0;
}



 

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值