首页 > 其他分享 >Codeforces Global Round 21 B. NIT Destroys the Universe

Codeforces Global Round 21 B. NIT Destroys the Universe

时间:2023-09-10 21:33:25浏览次数:43  
标签:std Destroys 21 int Universe leq while 操作 不优

给一个长为 \(n\) 的数组,可以执行以下操作任意次:

  • 选择 \(l, r(1 \leq l < r \leq n)\) ,让 \(\forall i(l \leq i \leq r), a_i = mex(\{a_l, a_{l+1}, \cdots, a_{r}\})\) 。

问最小操作数使得 \(\forall i, a_i = 0\) 。

观察:答案 \(\leq 2\) ,因为对 \([1, n]\) 操作不超过两次即可使 \(max_{i=1}^{n} a_i = 0\) 。

经典问题:左右端点处的连续合法区间舍去。

如果全为 \(0\) ,则不存在非 \(0\) 位,不需要操作。

否则到左起第一个非 \(0\) 位 \(l\) ,右起第一个非 \(0\) 位 \(r\) 。

  • 若 \(\min_{i = l}^{r} a_i = 0\) ,则需操作 \(2\) 次。
  • 若 \(\min_{i = l}^{r} a_i = 1\) ,则需操作 \(1\) 次。
view
#include <bits/stdc++.h>
void solve() {
	int n; std::cin >> n;
	std::vector<int> a(n+1);
	for (int i = 1, x; i <= n; i++) {
		std::cin >> a[i];
	}
	if (std::count(a.begin() + 1, a.end(), 0) == n) {
		std::cout << 0 << '\n';
		return;
	}
	int l = 1, r = n;
	while (a[l] == 0) l += 1;
	while (a[r] == 0) r -= 1;	
	if (std::count(a.begin() + l, a.begin() + r + 1, 0) > 0) std::cout << 2 << '\n';
	else std::cout << 1 << '\n';

}
signed main() {
	int _ = 1; std::cin >> _;
	while (_--) solve();
	return 0;
} 

若不先考虑是否全为 \(0\) ,直接寻找非 \(0\) 位的做法是不优的。

一种不优做法
int l = 1, r = n;
while (l < n && a[l] == 0) l++;
while (r > 1 && a[r] == 0) r--;

最后根据 \(l, r\) 位置判断的做法是不优的。比如理论上 \(l > r\) 直观上容易认为当且仅当全是 \(0\) 成立。

但当 \(n = 1, a_1 = 0\) ,会得到 \(l = r\) 。需要追加考虑。

这在思维逻辑性上是不强且更复杂的。

标签:std,Destroys,21,int,Universe,leq,while,操作,不优
From: https://www.cnblogs.com/zsxuan/p/17692000.html

相关文章

  • 20211312徐元琦 学习笔记1
    历史:Unix是早期的商业化操作系统,诞生于20世纪60年代,最早由AT&T的贝尔实验室开发。它的设计目标是支持多用户和多任务的环境。Linux是由LinusTorvalds于1991年创建的开源操作系统。它最初是为个人计算机而开发,后来演变成一个广泛的操作系统家族。联系:Linux是基于Unix的设计,因......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》学习笔记1
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就......
  • 2023-2024-1 20211306 密码系统设计与实现课程学习笔记1
    20211306密码系统设计与实现课程学习笔记1学习任务详情自学教材第1,2章,提交学习笔记知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一......
  • 20211105李宜时《信息安全系统设计基础》第一周学习总结
    20211105李宜时《信息安全系统设计基础》第一周学习总结老师好,我针对教科书和云班课上面的知识学习了这门课第一章和第二章的知识Linux的一些常用的命令ls:用于列出目录中的文件和子目录。cd:用于改变当前工作目录。pwd:显示当前工作目录的路径。mkdir:创建新的目录。rmdir:删......
  • 20211421《信息安全系统设计与实现》第一周学习笔记
    知识点总结第一章关于本书研究Unix/Linux系统编程的专著,涵盖Unix/Linux的所有基本组件,包括进程管理、并发编程、定时器和时钟服务、文件系统、网络编程和MySQL数据库系统。本书目标强化学生编程背景知识动态数据结构的应用进程概念和进程管理并发编程定时器和定时功能......
  • 20211314王艺达信息安全系统设计与实现学习笔记(1)
    作业要求链接https://www.mosoteach.cn/web/index.php?c=interaction_homework&m=s_write&clazz_course_id=97072AE7-2C45-11EE-8539-1C34DA7B3F7C&id=F3080EAA-E3B7-414E-B311-938F0B8988F0&order_item=group&status=IN_PRGRS第一章学习总结及自测知识点归纳什么是Unix/Linux......
  • Java基础知识面试题系列三:21~30题
    Java基础知识面试题系列三:21~30题21.抽象类(abstractclass)与接口(interface)有什么异同22.内部类有哪些23.如何获取父类的类名24.this与super有什么区别25.break、continue以及return有什么区别26.final、finally和finalize有什么区别27.JDK中哪些类是不能继承的28.assert有什么......
  • P8029 [COCI2021-2022#3] Akcija 题解
    注:这篇题解中涉及到的所有概念均会在其第一次出现时用斜体标出,有些概念给出了定义,而有些概念的含义请自行意会。定义状态为选了的物品数\(a\)与相应总价格\(b\)的二元组\((a,b)\)。相应地定义状态之间的大小关系、最优状态与状态和状态的加法运算\((a_1,b_1)+(a_2,b......
  • UVA11210 题解
    思路分析一道大模拟。一共只有\(34\)种牌,因此可以一次判断是否“听”这些牌。比如,为了判断是否“听”一万,只需要判断自己拿到这张一万后能否可以继续和牌。这样,问题就转化成了给定\(14\)张牌,判断是否可以和牌。为此,我们可以递归求解:首先将两张牌作为“将”,然后每次选\(3\)......
  • 洛谷 P5218 无聊的水题 II
    洛谷传送门无聊的水题。根据裴蜀定理,显然能组合出任意值的充要条件是,选出的数的\(\gcd=1\)。设\(g(i)\)为在\(1\simn\)中选出若干个数使得它们\(\gcd=i\)的方案数,\(f(i)\)为在\(1\simn\)中选出若干个数使得它们\(\gcd\)是\(i\)的倍数的方案数。我们有:\[......