CF1610B [Kalindrome Array]
Problem
题目简述
给你一个数列 \(a\),有这两种情况,这个数列是「可爱的」。
- 它本身就是回文的。
- 定义变量 \(x\),满足:序列 \(a\) 中所有值等于 \(x\) 的元素删除之后,它是回文的。
思路
首先考虑暴力。暴力枚举数组中的每一个数,当作变量 \(x\),然后进行回文检验。
时间复杂度 \(O(n^2)\),严重超时。
然后考虑如何优化。
根据回文判断的方法,我们很容易想到:双指针的优化。
设变量 \(l\) 和 \(r\),初始值分别为 \(1\) 和 \(n\)。如果扫描到 a[l] != a[r] 的情况,用两个变量记录一下它们的值,然后停止循环。
然后删除 \(a\) 数组中值为 \(a_l\) 或者是 \(a_r\) 的数字,看看删除之后是否满足回文的条件。
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int t, n, a[N], tmp[N];
bool ishuiwen(int n, int b[]) { // 是否是回文
	for (int i = 1; i <= n; i++) {
		if (b[i] != b[n - i + 1]) return false;
	}
	return true;
}
bool check(int x) { // 检验删除值为x的情况下是否满足回文
	int idx = 0;
	for (int i = 1; i <= n; i++) {
		if (a[i] != x) tmp[++idx] = a[i];
	}
	return ishuiwen(idx, tmp);
}
int main() {
	scanf("%d", &t);
	while (t--) {
		scanf("%d", &n);
		for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
		if (ishuiwen(n, a)) { // 本身就满足条件
			printf("YES\n");
			continue;
		}
		int l = 1, r = n, x, y;
		while (l <= r) {
			if (a[l] != a[r]) { // 不满足,删数字
				x = a[l], y = a[r];
				break;
			} else l++, r--;
		}
		if (check(x) || check(y)) printf("YES\n"); // 只要一个满足条件就可以
		else printf("NO\n");
	}
	return 0;
}
CF1610B [Kalindrome Array]的更多相关文章
- Codeforces Global Round 17
		Codeforces Global Round 17 A. Anti Light's Cell Guessing 坑点:\(n=1,m=1\) 时答案为 \(0\) . 其他情况:当 \(n=1\) ... 
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
		Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ... 
- ES5对Array增强的9个API
		为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ... 
- JavaScript Array对象
		介绍Js的Array 数组对象. 目录 1. 介绍:介绍 Array 数组对象的说明.定义方式以及属性. 2. 实例方法:介绍 Array 对象的实例方法:concat.every.filter.fo ... 
- 了解PHP中的Array数组和foreach
		1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ... 
- 关于面试题 Array.indexof() 方法的实现及思考
		这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ... 
- javascript之活灵活现的Array
		前言 就如同标题一样,这篇文章将会灵活的运行Array对象的一些方法来实现看上去较复杂的应用. 大家都知道Array实例有这四个方法:push.pop.shift.unshift.大家也都知道 pus ... 
- 5.2 Array类型的方法汇总
		所有对象都具有toString(),toLocaleString(),valueOf()方法. 1.数组转化为字符串 toString(),toLocaleString() ,数组调用这些方法,则返回 ... 
- OpenGL ES: Array Texture初体验
		[TOC] Array Texture这个东西的意思是,一个纹理对象,可以存储不止一张图片信息,就是说是是一个数组,每个元素都是一张图片.这样免了频繁地去切换当前需要bind的纹理,而且可以节省系统资 ... 
- Merge Sorted Array
		Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ... 
随机推荐
- [CF 1780B] GCD Partition
			B. GCD Partition 题意 : 给一个长度为n的序列, 并将其分成连续的k块(k > 1), 得到序列b, 使得 \(gcd(b_{1}, b_{2}, b_{3}, ..., b_ ... 
- CSDN这么公然爬取(piao qie)cnblogs的文章,给钱了吗?
			在CSDN网站经常看到有博客转载cnblogs的文章,开始还以为是网友自行转载,后来才发现,这些所谓的转载应该都是机器爬取(piao qie)过去的.不知道cnblogs对此怎么看. 下面看看几个示例 ... 
- yum与软件包
			从一个命令开始 yum provides iostat ## 找到软件包名为:sysstat-10.1.5-19.el7.x86_64 安装软件包 yum install sysstat-10.1.5 ... 
- 2021-3-13 xml的增删改查
			public void XmlAdd(string filename, List<People> pList) { try { List<People> peoples = X ... 
- 关于"覆盖问题”的反思
			[HAOI2007]覆盖问题 题目描述 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定 用3个L*L的 ... 
- sqli笔记
			MySQL数据库自带的数据库information_schema 里面有三个比较重要的表 SCHEMATA .TABLES . COLUMNS 保存数据库所有的数据库名 表名 字段名 SCHEM ... 
- 针对sarasa-shuffle.woff2加密字体进行解密
			本文针对的是类似于sarasa-shuffle.woff2加密字体的一个研究. 字体加密是使用Unicode编码将其映射到不同的字体显示的一种前端显示加密手段.在反爬虫中能够起到较好的效果,爬虫将只能 ... 
- el-date-picker 在表单中宽度(width)问题
			在使用element-plus的日期选择组件 el-date-picker的时候,发现form表单内的日期选择框并不能跟el-input 一样把宽度撑满.而是要小一圈. 这样在排版中显得不太整齐,但是 ... 
- Mybatis操作数据库流程源码
			Java操作数据库需要经过3个大步骤: 获取数据库连接 执行SQL语句 关闭数据库连接 Mybatis将这几个步骤进行了封装,将获取数据库连接的给工作交给了SqlSessionFactory,将执行S ... 
- [MAUI]在.NET MAUI中实现可拖拽排序列表
			.NET MAUI 中提供了拖放(drag-drop)手势识别器,允许用户通过拖动手势来移动控件.在这篇文章中,我们将学习如何使用拖放手势识别器来实现可拖拽排序列表.在本例中,列表中显示不同大小的磁贴 ... 
