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]的更多相关文章

  1. Codeforces Global Round 17

    Codeforces Global Round 17 A. Anti Light's Cell Guessing 坑点:\(n=1,m=1\) 时答案为 \(0\) . 其他情况:当 \(n=1\) ...

  2. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  3. ES5对Array增强的9个API

    为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...

  4. JavaScript Array对象

    介绍Js的Array 数组对象. 目录 1. 介绍:介绍 Array 数组对象的说明.定义方式以及属性. 2. 实例方法:介绍 Array 对象的实例方法:concat.every.filter.fo ...

  5. 了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我 ...

  6. 关于面试题 Array.indexof() 方法的实现及思考

    这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...

  7. javascript之活灵活现的Array

    前言 就如同标题一样,这篇文章将会灵活的运行Array对象的一些方法来实现看上去较复杂的应用. 大家都知道Array实例有这四个方法:push.pop.shift.unshift.大家也都知道 pus ...

  8. 5.2 Array类型的方法汇总

    所有对象都具有toString(),toLocaleString(),valueOf()方法. 1.数组转化为字符串 toString(),toLocaleString() ,数组调用这些方法,则返回 ...

  9. OpenGL ES: Array Texture初体验

    [TOC] Array Texture这个东西的意思是,一个纹理对象,可以存储不止一张图片信息,就是说是是一个数组,每个元素都是一张图片.这样免了频繁地去切换当前需要bind的纹理,而且可以节省系统资 ...

  10. Merge Sorted Array

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

随机推荐

  1. CS与反向代理

    Cobalt Strike Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器.自3.0以后已经不在使用Metasploit框架而作为一个独立的平台使用,分为客户端与服 ...

  2. linux内核编译体验篇(一)

    文章目录 一. 准备环境 二. 获取内核源码 三. 交叉编译工具链的配置 1. 博友们常用安装方法链接 2. 公司常用的交叉工具链使用方法 四. 内核解压以及如何打补丁 五. 内核基本配置 1. 编译 ...

  3. C语言指针--二级指针

    文章目录 前言 一.什么是二级指针 二.二级指针的使用 1.二级指针的定义 2.二级指针的赋值 3.二级指针的使用 3.1 用二级指针输出一级指针的地址 3.2 用二级指针输出一级指针中的内容 3.3 ...

  4. MAUI中Windows的标题栏颜色怎么设置

    如下图所示,MAUI中Windows下的标题栏是灰色的,如何设置颜色,找了很久,在GitHub上的issue中找到了答案, 找到/Platforms/Windows/App.xaml <maui ...

  5. PaddleSharp:跨越一年的版本更新与亮点

    PaddleSharp:跨越一年的版本更新与亮点 我始终坚信,开源社区是技术进步的重要推动力,也是我抽出我业余时间,投入到PaddleSharp这个项目的原因,这个项目充分展现了.NET在复杂计算领域 ...

  6. python3 猜数字小游戏

    Guess_the_Number.py import random # Generate a random number between 1 and 100 number = random.randi ...

  7. Ubuntu Ctrl + Alt + [F1~F6] 图形化终端与命令行终端

    在20.04的版本中,F1和F2是两个图形化终端,可以登陆不同的用户.(如果是相同的用户登陆,则进入的是同一个终端.) F4-F6都是命令行终端,即便使用相同的用户登陆,也是打开不同的终端. 说明,命 ...

  8. expect: telnet2switch

    #!/usr/bin/expect if {$argc != 1} { puts "usage: ./telnet2sswitch <r2|r3>" exit } if ...

  9. APubPlat 一款Devops自动化部署、持续集成、堡垒机开源项目、友好的Web Terminal

    嗨.很高心你能进入这里,我是zane,  在这里给你介绍一款完整的Devops自动化部署工具 APubPlat - 一款完整的Devops自动化部署.持续集成.堡垒机.并且友好的Web Termina ...

  10. AWVS14破解docker一键安装

    先上个图 2021最新版 1.使用docker查看是否有awvs:    [root@hadoop-01 awvs13-linux]# docker search awvs    NAME       ...