Constant Palindrome Sum(贪心*RMQ)
怎么说呢,想了几个小时没做出来实在可惜。
\(\color{Red}{首先肯定想到暴力嘛!但是x定值有那么多值可以取,怎么办呢?}\)
但是题目中有一个很关键的条件
\]
所以,在最坏情况下我们的答案会是\(n/2-s.(s为\frac{n}{2}对数中和为k+1的总数)\)
\(\color{Purple}{为什么?因为不管怎样,对于所有的\frac{n}{2}对数,我都可以改变一个数使得定值变成K+1.}\)
\]
\]
\(显然怎么取极值都可以改变一个数到达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)的更多相关文章
- Codeforces Round #636div3 D. Constant Palindrome Sum (划分区间,差分)
题意:给你一个长度为偶数n的数组,每次可以将一个元素修改为不大于k的值,要求每个a[i]+a[n-i+1]都相等,求最少操作多少次 题解:假设每一对的和都为sum,小的记为mn,大的记为mx; ...
- Codeforces 486C Palindrome Transformation(贪心)
题目链接:Codeforces 486C Palindrome Transformation 题目大意:给定一个字符串,长度N.指针位置P,问说最少花多少步将字符串变成回文串. 解题思路:事实上仅仅要 ...
- codeforces 486C Palindrome Transformation 贪心求构造回文
点击打开链接 C. Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes ...
- SPOJ:Elegant Permuted Sum(贪心)
Special Thanks: Jane Alam Jan*At moment in University of Texas at San Antonio - USA You will be give ...
- Codeforces Round #277 (Div. 2)C.Palindrome Transformation 贪心
C. Palindrome Transformation Nam is playing with a string on his computer. The string consists o ...
- Codeforces Round 486C - Palindrome Transformation 贪心
C. Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes input ...
- URAL 1297 Palindrome (后缀数组+RMQ)
题意:给定一个字符串,求一个最长的回回文子串,多解输出第一个. 析:把字符串翻转然后放到后面去,中间用另一个字符隔开,然后枚举每一个回文串的的位置,对第 i 个位置,那么对应着第二个串的最长公共前缀, ...
- 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 ...
- #333 Div2 Problem B Approximating a Constant Range (尺取 && RMQ || 尺取 && multiset)
题目链接:http://codeforces.com/contest/602/problem/B 题意 :给出一个含有 n 个数的区间,要求找出一个最大的连续子区间使得这个子区间的最大值和最小值的差值 ...
随机推荐
- python批量爬取动漫免费看!!
实现效果 运行环境 IDE VS2019 Python3.7 Chrome.ChromeDriver Chrome和ChromeDriver的版本需要相互对应 先上代码,代码非常简短,包含空行也才50 ...
- Some Modern Softwares' drawbacks: User experience 12/29/2015
In the nowadays, there are many APP in the PC or smart Phone. Some of them can't meet the customers' ...
- 非oracle用户sysdba登陆出TNS-12547错误
这个问题mark下,测试机器oracle从12c升级到19c后,非oracle用户 sysdba登陆不上.sqlnet.log里错误是: sqplus uasa/uasa error Fa ...
- python里的内置函数你知道有多少个吗?
Python 内置函数最全汇总: 1 abs() 绝对值或复数的模 2 all() 接受一个迭代器,如果迭代器的所有元素都为真,那么返回True,否则返回False 3 any() 接受一个迭代器,如 ...
- ntp和chrony
目录 chrony 简介 ntp pool ntp 配置文件 chrony 配置文件 chronyc 命令行工具 修改时区 chrony 简介 chrony 是 RedHat 开发的,它是网络时间协议 ...
- JasperReports入门教程(三):Paramters,Fields和Detail基本组件介绍
JasperReports入门教程(三):Paramter,Field和Detail基本组件介绍 前言 前两篇博客带领大家进行了入门,做出了第一个例子.也解决了中文打印的问题.大家跟着例子也做出了de ...
- MySQL server has gone away(在执行sql的时候,莫名的报错)
原文:https://cenalulu.github.io/mysql/mysql-has-gone-away/ MySQL Server has gone away报错原因汇总分析 原因1. MyS ...
- 为什么redis是单线程的以及为什么这么快?
官网的说法 我们先来认真看一下官网的说法.翻译过来大意如下: CPU并不是您使用Redis的瓶颈,因为通常Redis要么受内存限制,要么受网络限制.例如,使用在一般Linux系统上运行的流水线Redi ...
- 0day学习笔记(2)--函数调用
函数调用过程 调用函数操作 函数参数入栈(在当前函数栈帧),从左至右或从右至左视情况而定 一般为从右至左 mov 地址,参数 的一个操作并不直接pop而是定位到地址将参数传递进去 call offse ...
- webug3.0靶场渗透基础Day_1
第一关: 最简单的get注入 单引号报错 http://192.168.129.136/pentest/test/sqli/sqltamp.php?gid=1' order by 5 --+ ...