传送门

怎么说呢,想了几个小时没做出来实在可惜。

\(\color{Red}{首先肯定想到暴力嘛!但是x定值有那么多值可以取,怎么办呢?}\)

但是题目中有一个很关键的条件

\[a[i]>=1\&\&a[i]<=k
\]

所以,在最坏情况下我们的答案会是\(n/2-s.(s为\frac{n}{2}对数中和为k+1的总数)\)

\(\color{Purple}{为什么?因为不管怎样,对于所有的\frac{n}{2}对数,我都可以改变一个数使得定值变成K+1.}\)

\[若改变一个值使得和最小,必定把最大值改为1,此时和为L=min(a,b)+1
\]

\[若改变一个值使得和最大,必定把最小值改为k,此时和为R=max(a,b)+k
\]

\(显然怎么取极值都可以改变一个数到达k+1.\)

\(还想缩小答案怎么办?那么定值只有\frac{n}{2}种选法,也就是把已有的和当作定值。\)

如果不是这样,每对数至少要改变一次,还不如上面的决策优秀。

\(这样一来,我们可以打出一个暴力代码。期望复杂度O(n^2)\)

暴力代码

但是上面说了那么一大堆,其实代码根本过不了哈哈(折磨一下你),卡死在了最后一个数据点。

\(\color{Orange}{--------------------(●ˇ∀ˇ●)我是一条分割线--------------------------}\)

那怎么另辟蹊径呢?其实做法和上面也没差太多。

\(注意到,定值可能取[2,2*k](当然根据上面的暴力分析可以缩小范围,不过没必要)\)

而且,对于任意的一组\(a[i],a[n-i+1]\)来说无非三种情况。

\(Ⅰ.改变一个数达到定值\)

\(Ⅱ.改变两个数达到定值\)

\(Ⅲ.不需要改变达到定值\)

\(现在令sumn=a[i]+a[n-i+1],x为定值,L,R(L和R的含义上面有分析)\)

\(\color{Red}{对于第一种情况,当x>=L\&\&x<=R\&\&x!=sumn时,所有满足条件的x操作数加1}\)

\(\color{Purple}{对于第二种情况,当x<L\|\| x>R时,所有满足条件的x操作数加2}\)

\(\color{Pink}{对于第三种情况,当x==sumn时满足,操作数不变}\)

那么我们完全可以维护每个数作为定制的操作数。

\(上面这些不都是区间加法吗?树状数组?线段树?差分?随便你辣!!\)

#include <bits/stdc++.h>
using namespace std;
const int maxn=4*1e5+9;
int t,n,k,a[maxn],vis[maxn];
int main()
{
cin>>t;
while(t--)
{
memset(vis,0,sizeof(vis));
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n/2;i++)
{
int l = min(a[i] , a[n-i+1])+1;
int r = max(a[i] , a[n-i+1])+k;
int sumn = a[i] + a[n-i+1];
vis[2]+=2,vis[l]-=2;//no.1
vis[l]+=1,vis[r+1]-=1;//no.2
vis[r+1]+=2,vis[2*k+1]-=2;//no.3
vis[sumn]--,vis[sumn+1]++;//sumn在前面no.2多加了,减回来
}
int ans=1e9;
for(int i=2;i<=2*k;i++)
{
vis[i]+=vis[i-1];
ans=min(ans,vis[i]);
}
cout<<ans<<endl;
}
}

Constant Palindrome Sum(贪心*RMQ)的更多相关文章

  1. Codeforces Round #636div3 D. Constant Palindrome Sum (划分区间,差分)

    题意:给你一个长度为偶数n的数组,每次可以将一个元素修改为不大于k的值,要求每个a[i]+a[n-i+1]都相等,求最少操作多少次 题解:假设每一对的和都为sum,小的记为mn,大的记为mx;     ...

  2. Codeforces 486C Palindrome Transformation(贪心)

    题目链接:Codeforces 486C Palindrome Transformation 题目大意:给定一个字符串,长度N.指针位置P,问说最少花多少步将字符串变成回文串. 解题思路:事实上仅仅要 ...

  3. codeforces 486C Palindrome Transformation 贪心求构造回文

    点击打开链接 C. Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes ...

  4. SPOJ:Elegant Permuted Sum(贪心)

    Special Thanks: Jane Alam Jan*At moment in University of Texas at San Antonio - USA You will be give ...

  5. Codeforces Round #277 (Div. 2)C.Palindrome Transformation 贪心

    C. Palindrome Transformation     Nam is playing with a string on his computer. The string consists o ...

  6. Codeforces Round 486C - Palindrome Transformation 贪心

    C. Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes input ...

  7. URAL 1297 Palindrome (后缀数组+RMQ)

    题意:给定一个字符串,求一个最长的回回文子串,多解输出第一个. 析:把字符串翻转然后放到后面去,中间用另一个字符隔开,然后枚举每一个回文串的的位置,对第 i 个位置,那么对应着第二个串的最长公共前缀, ...

  8. A Magic Lamp HDU - 3183 (逆向贪心/RMQ)

    Kiki likes traveling. One day she finds a magic lamp, unfortunately the genie in the lamp is not so ...

  9. #333 Div2 Problem B Approximating a Constant Range (尺取 && RMQ || 尺取 && multiset)

    题目链接:http://codeforces.com/contest/602/problem/B 题意 :给出一个含有 n 个数的区间,要求找出一个最大的连续子区间使得这个子区间的最大值和最小值的差值 ...

随机推荐

  1. shell map数据结构的实现

    前言     Bash默认不支持二维数组,如果我们想实现map 数据结构,可以安装如下的方式来进行构造   预备知识     eval:  它是shell内建命令,用于字符串的解析.它会首先扫描命令行 ...

  2. Redis之quicklist源码分析

    一.quicklist简介 Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边). 一个列表最多可以包含 232 - 1 个元素 (4294967 ...

  3. 2019-07-31【机器学习】无监督学习之降维NMF算法 (人脸特征提取)

    代码 from numpy.random import RandomState #加载RandomState用于创建随机种子 import matplotlib.pyplot as plt from ...

  4. Hadoop学习笔记(1)-Hadoop在Ubuntu的安装和使用

    由于小编在本学期有一门课程需要学习hadoop,需要在ubuntu的linux系统下搭建Hadoop环境,在这个过程中遇到一些问题,写下这篇博客来记录这个过程,并把分享给大家. Hadoop的安装方式 ...

  5. Android | 教你如何在安卓上实现二代身份证识别,一键实名认证

    @ 目录 前言 场景 开发前准备 android studio 安装 在项目级gradle里添加华为maven仓 在应用级的build.gradle里面加上SDK依赖 在AndroidManifest ...

  6. testNG 常用的注解

    常用注解介绍: @BeforeSuite 在该套件的所有测试都运行在注释的方法之前,仅运行一次 @AftereSuite 在该套件的所有测试都运行在注释方法之后,仅运行一次 @BeforeClass  ...

  7. pytorch中tensor的属性 类型转换 形状变换 转置 最大值

    import torch import numpy as np a = torch.tensor([[[1]]]) #只有一个数据的时候,获取其数值 print(a.item()) #tensor转化 ...

  8. Thymeleaf入门入门入门入门入门入门入门入门入门入门入门

    Thymeleaf 官网部分翻译:反正就是各种好 Thymeleaf是用来开发Web和独立环境项目的服务器端的Java模版引擎 Spring官方支持的服务的渲染模板中,并不包含jsp.而是Thymel ...

  9. FPM制作Nginx的RPM软件包

    FPM制作Nginx的rpm软件包 FPM相关参数-s:指定源类型-t:指定目标类型,即想要制作为什么包-n:指定包的名字-v:指定包的版本号-C:指定打包的相对路径-d:指定依赖于哪些包-f:第二次 ...

  10. Springboot以Jetty为容器实现http重定向到https

    1 简介 之前讲解的Springboot整合https用的是tomcat作为容器,tomcat也是一个流行多年的老牌Java容器了.但针对不同的场景,还是会有不同的选择,如Jetty.Jetty是架构 ...