当前位置: 首页 > news >正文

AtCoder Beginner Contest AT_abc395_d ABC395D Pigeon Swap 题解

前言

在谎言中迷茫,试图躲避瓶颈。
可惜细节太多,浪费五发罚时。
一个绿名用户,被出题人卡住。
八十六分钟多,才看见一抹绿。

本题解 LaTeX \LaTeX LATEX 格式可能不太美观,以内容为主。

题目大意

有一群鸽子和它们的窝,三种操作,你要在第三种的时候输出一个数。题面很简单,没有太多的文字游戏,自行阅读吧。这篇题解不提供题目翻译。

思路

想一想暴力,为什么会超时?正解需要对哪里进行优化?

观察第二种操作,发现它太吃操作了,是这道题的时间复杂度瓶颈。本文将介绍一种时间复杂度为 O ( Q ) O(Q) O(Q) 的做法。对于第二种操作,显然不能暴力模拟——为了不超时,我们绝对不能交换鸽子!作为口是心非的 OIer,让我们充分发扬人类智慧:做个记号,下面算答案的时候注意一下即可。

具体地,我们要维护三个数组:
a i 表示第 i 只鸽子在哪个窝里; b i 表示“第 i 个窝”里的鸟儿实际上被换到了哪个窝; c i 表示第 i 个窝现在用谁表示。 a_i表示第i只鸽子在哪个窝里;\\ b_i表示“第i个窝”里的鸟儿实际上被换到了哪个窝;\\ c_i表示第i个窝现在用谁表示。 ai表示第i只鸽子在哪个窝里;bi表示i个窝里的鸟儿实际上被换到了哪个窝;ci表示第i个窝现在用谁表示。
有点绕,好好理解一下。毕竟我调了近一个小时,这肯定不是什么简单的东西。

现在来说一下三种操作的实现。

  • 第一种操作——单只鸽子 x x x 搬到 y y ya[x]=c[y];
  • 第二种操作—— x x x y y y 两个窝集体交换:swap(b[c[x]],b[c[y]]); swap(c[x],c[y]);
  • 第三种操作——输出 x x x 在哪里:cout << b[a[x]] << endl;

代码实现

Submission #63299010

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

int n, q;
int a[1000010];
int b[1000010];
int c[1000010];

int main()
{
	cin >> n >> q;
	for (int i = 1; i <= n; i++)
		a[i] = b[i] = c[i] = i;
	while (q--)
	{
		int op;
		cin >> op;
		if (op == 1)
		{
			int x, y;
			cin >> x >> y;
			a[x] = c[y];
		}
		else if (op == 2)
		{
			int x, y;
			cin >> x >> y; 
			int cx = c[x];
			int cy = c[y];
			b[cx] = y; c[y] = cx;
			b[cy] = x; c[x] = cy;
		}
		else
		{
			int x; cin >> x;
			cout << b[a[x]] << endl;
		}
	}
	return 0;
}

相关文章:

  • Java 8 中,可以使用 Stream API 和 Comparator 对 List 按照元素对象的时间字段进行倒序排序
  • ollama 提供给外部访问
  • Java——String
  • 数据库设计报告
  • leetcode28 找出字符串第一个匹配值的下标 KMP算法
  • android 文本控件显示滑动条并自动滑动到最底部
  • 初识 Node.js
  • 微服务学习(1):RabbitMQ的安装与简单应用
  • 2025-03-01 学习记录--C/C++-C语言 整数类型对比
  • Lua | 每日一练 (4)
  • JVM虚拟机的深入浅出
  • 数据结构1-4 队列
  • 云原生架构篇——Kubernetes弹性伸缩与Service Mesh实践
  • 在Linux上安装go环境
  • IP-----双重发布
  • 算法-数据结构(图)-弗洛伊德算法复现(Floyd)
  • 袋鼠数据库工具 6.4 AI 版已上线
  • [AI机器人] Web-AI-Robot机器人前瞻版--比奇堡海之霸凯伦
  • Acwing 哞叫时间II
  • 时间复杂度练习题(6道题,C语言)
  • 机械毕业设计代做网站推荐/现在百度推广有用吗
  • 深圳市罗湖区网站建设/推广运营是什么工作
  • 富阳网站建设报价/推广技术
  • 江苏网站建设网络公司/关键词指数查询
  • 长春作网站建设的公司/有什么推广产品的渠道
  • 虚拟主机怎么做网站/免费推广网站排行榜