首页 > 其他分享 >2023.3.19 模拟赛题解

2023.3.19 模拟赛题解

时间:2023-03-19 14:23:05浏览次数:40  
标签:opt 凡凡 19 题解 列表 2023.3 int 聊天

银行取款

题意

  • 在现代文明社会中,大家在诸如银行办理业务、车站买票等活动时都很文明,没有插队的现象,本着"先来先服务"的规矩。
  • 初赛已经结束了,凡凡的爸爸打算上银行去取点钱,带着初赛考得很好的凡凡上街购物,凡凡的爸爸到银行时发现很多人在办理业务,凡凡的爸爸就自觉地在排队机上去了一个业务号码,并焦急的等待着银行柜台叫自己的号码......
  • 输入有若干行,每一行包含 I(表示等待办理业务)和顾客的序号;或者 是 O(表示办理完业务的人离开)。
  • 输出银行排队中出队顾客序列,若队列为空(没人等待),则输出 "None"。
  • 输入不超过 \(10^3\) 行。

题解

显然是队列板子题。

维护一个队列 q,这里偷懒用容器 std::queue

I 操作相当于 q.push(...)O 操作相当于输出 q.front(),然后 q.pop()。注意队列特判为空。

#include <queue>
#include <stdio.h>
class reque// 瞎封装一个吧,好看一点。
{
private:
	std::queue<int> q;
public:
	void insert(int val)
	{
		q.push(val);
		return ;
	}
	void erase()
	{
		if(q.empty())
			puts("None");
		else
		{
			printf("%d\n",q.front());
			q.pop();
		}
		return ;
	}
}q;
char opt[3];
int main()
{
	int id;
	while(~scanf("%s",opt))//单个字符转化成字符串,避免不可见字符问题。
	{
		if(opt[0]=='O')
		{
			q.erase();
		}else
		{
			scanf("%d",&id);
			q.insert(id);
		}
	}
	return 0;
}

聊天列表

题意

  • Smart 热衷于在社交网络上消磨时间。他在他最喜欢的网络中创建一个带有聊天列表的页面,这样当他向某个朋友发送消息时,他朋友的聊天内容就会上升到聊天列表的顶部。
  • 其他聊天的相对顺序没有改变。如果之前没有与这个朋友的聊天记录,那么一个新的聊天记录就会被插入到列表的顶部。
  • 假设聊天列表最初为空,给定 Smart 发消息的顺序,在处理完他的所有消息后,输出生成的聊天列表。
  • \(n\le 2\times 10^5\)。

题解

首先将给定的聊天序列压入一个栈。

从栈顶开始扫,如果一个名字是第一次出现,则输出;反之忽略。

手模发现大概是正确的。

怎么实现呢,虽然给定 \(\forall str,|str| \le 10\),依然不想写字符串哈希,用 umap 得了。

标签:opt,凡凡,19,题解,列表,2023.3,int,聊天
From: https://www.cnblogs.com/Syara/p/17233002.html

相关文章