Codeforces Round #636 (Div. 3) D.Constant Palindrome Sum

题目链接
You are given an array a consisting of n integers (it is guaranteed that n is even, i.e. divisible by 2). All ai does not exceed some integer k.

Your task is to replace the minimum number of elements (replacement is the following operation: choose some index i from 1 to n and replace ai with some integer in range [1;k]) to satisfy the following conditions:

after all replacements, all ai are positive integers not greater than k;
for all i from 1 to n2 the following equation is true: ai+an−i+1=x, where x should be the same for all n2 pairs of elements.
You have to answer t independent test cases.

Input

The first line of the input contains one integer t (1≤t≤1e4) — the number of test cases. Then t test cases follow.

The first line of the test case contains two integers n and k (2≤n≤2e5,1≤k≤2e5) — the length of a and the maximum possible value of some ai correspondingly. It is guratanteed that n is even (i.e. divisible by 2). The second line of the test case contains n integers a1,a2,…,an (1≤ai≤k), where ai is the i-th element of a.

It is guaranteed that the sum of n (as well as the sum of k) over all test cases does not exceed 2⋅105 (∑n≤2e5, ∑k≤2e5).

Output

For each test case, print the answer — the minimum number of elements you have to replace in a to satisfy the conditions from the problem statement.

Example

input

4
4 2
1 2 1 2
4 3
1 2 2 1
8 7
6 1 1 7 6 3 4 6
6 6
5 2 6 1 3 4

output

0
1
4
2

比较巧妙的一道题目~
我们任意想到暴力,即从 [ 2 , 2 ∗ k ] [2,2*k] [2,2∗k] 里面一个个枚举,找最少替代次数,这样想肯定是会超时的,所以我们考虑用预处理的方式快速计算每个数需要的最少替代次数
首先用 c n t [ i ] cnt[i] cnt[i] 记录每一对 a [ i ] + a [ n − i − 1 ] a[i]+a[n-i-1] a[i]+a[n−i−1] 出现的次数
然后用 p r e [ i ] pre[i] pre[i] 记录每一对 a [ i ] , a [ n − i − 1 ] a[i],a[n-i-1] a[i],a[n−i−1] 变换一次得到的数的范围,很容易发现这个范围就是 [ m i n ( a [ i ] , a [ n − i − 1 ] ) + 1 , m a x ( a [ i ] , a [ n − i − 1 ] ) + k ] [min(a[i],a[n-i-1])+1,max(a[i],a[n-i-1])+k] [min(a[i],a[n−i−1])+1,max(a[i],a[n−i−1])+k],通过记录端点的值控制区间修改,即 p r e [ m i n ( a [ i ] , a [ n − i − 1 ] ) + 1 ] + 1 pre[min(a[i],a[n-i-1])+1]+1 pre[min(a[i],a[n−i−1])+1]+1, p r e [ m a x ( a [ i ] , a [ n − i − 1 ] ) + k + 1 ] − 1 pre[max(a[i],a[n-i-1])+k+1]-1 pre[max(a[i],a[n−i−1])+k+1]−1,那么对每个数 i i i,所需的最小变换次数就是 ( n / 2 − p r e [ i ] ) ∗ 2 + p r e [ i ] − s u m [ i ] (n/2-pre[i])*2+pre[i]-sum[i] (n/2−pre[i])∗2+pre[i]−sum[i],遍历更新一下答案即可,AC代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;int main(){int t;cin>>t;while(t--){int n,k;cin>>n>>k;vector<int>a(n);for(auto &i:a) cin>>i;vector<int>cnt(2*k+1);for(int i=0;i<n/2;i++)cnt[a[i]+a[n-i-1]]++;vector<int>pre(2*k+2);for(int i=0;i<n/2;i++){int l1=a[i]+1,r1=a[i]+k;int l2=a[n-i-1]+1,r2=a[n-i-1]+k;pre[min(l1,l2)]++;pre[max(r1,r2)+1]--;}for(int i=1;i<=2*k+1;i++) pre[i]+=pre[i-1];int ans=1e9;for(int i=2;i<=2*k;i++){ans=min(ans,(pre[i]-cnt[i])+(n/2-pre[i])*2);}cout<<ans<<endl;}return 0;
}

Codeforces Round #636 (Div. 3) D.Constant Palindrome Sum相关推荐

  1. Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum 思维 + 差分

    传送门 文章目录 题意: 思路: 题意: 思路: 首先有一个显然的性质就是每组操作最多不会超过两次. 很容易想到一个很暴力的思路,就是枚举x∈[1,2∗k]x \in [1,2*k]x∈[1,2∗k] ...

  2. Codeforces Round #636 (Div. 3)D. Constant Palindrome Sum

    传送门-链接 题意:输入一个n和k,第二行输入一个长度为n的数组a,且保证了n为一个偶数,数组a中的每一个元素都不大于k,你可以修改多次,使得a[i]+a[n-i+1]=x(x为某个确定的值),你需要 ...

  3. Codeforces Round #636 (Div. 3)部分题解

    链接:Codeforces Round #636 (Div. 3) A - Candies 题意:求出一个x满足x+2∗x+4∗x+⋯+2k−1∗x=n且k>1 思路:提出x得x∗(1+2+4+ ...

  4. Codeforces Round #636 (Div. 3)

    Codeforces Round #636 (Div. 3)(2020.4.21) A.Candies 因为题目保证了有解,所以我们枚举一下 k k k就行了. #include <bits/s ...

  5. Codeforces Round #636 (Div. 3) F. Restore the Permutation by Sorted Segments 思维 + 暴力

    传送门 文章目录 题意: 思路: 题意: n≤200n\le200n≤200 思路: 首先关注到rrr从[2,n][2,n][2,n]都出现一次,所以很明显最后一个位置只出现一次,但是这样倒着来不是很 ...

  6. Codeforces Round #636 (Div. 3) E. Weights Distributing 思维 + bfs

    传送门 文章目录 题意: 思路: 题意: n≤2e5,m≤2e5n\le2e5,m\le2e5n≤2e5,m≤2e5 思路: 怎么感觉每场div3div3div3都有一个巧妙的图论题. 首先如果只有两 ...

  7. Codeforces Round #636 (Div. 3) C.Alternating Subsequence

    Codeforces Round #636 (Div. 3) C.Alternating Subsequence 题目链接 Recall that the sequence b is a a subs ...

  8. Codeforces Round #636 (Div. 3) 题解

    A. Candies 查看题解 数学 B. Balanced Array 查看题解 数学 C. Alternating Subsequence 查看题解 贪心 D. Constant Palindro ...

  9. Codeforces Round #636 (Div. 3) A-D

    A. Candies 题意 给定一个整数,判断是否存在 思路 先对公式进行预处理 明显是一个等比数列 化简后得到 因为答案一定存在 所以用快速幂从小到大枚举即可 #include<iostrea ...

最新文章

  1. 随办 企业打造完美执行团队的终极利器
  2. 关于python中程序流程结构-Python语言程序设计(第4章:程序结构设计)
  3. PostgreSQL参数优化对比性能测试
  4. JDK之ConcurrentHashMap
  5. 渭南java_渭南java语言入门教程视频
  6. Linux中Shell循环结构for用法笔记
  7. java调用js匿名函数参数,js匿名函数作为函数参数详解
  8. mysql常用操作指令总结
  9. Android脚本打包
  10. git安装 perl ubuntu_Ubuntu系统上安装Git
  11. CentOS 7.X配置连接网络
  12. SmartView函数HypSetActiveConnection使用
  13. 【数据库】MySQL单表查询
  14. 中兴配置dhcp服务器,中兴F623路由器如何投入使用dhcp服务器
  15. 技术团队管理:技术分享
  16. java 渲染_Java字体渲染
  17. python win32gui模块详解_Python笔记_第二篇_面向过程_第二部分_4.常用模块的简单使用_窗体控制模块(win32con、win32gui)...
  18. 驱动VS1003要注意的事项
  19. 最大公约数和最小公倍数实现
  20. 面试题(一)- 谈谈你对数据库中索引的理解

热门文章

  1. Leetcode 宝石与石头 C++
  2. CATIA V6二次开发——用VB脚本实现布尔运算
  3. 零基础学习百度云开发(一) 初见效果
  4. ORAN专题系列-2:O-RAN的系统架构
  5. 软件缺陷管理工具mantis
  6. JS实现元素消失特效
  7. UGUI粒子遮罩(UI Mask 遮挡粒子)
  8. mysql odbc.ini_odbc.ini配置 mysql
  9. SAFEARRAY、COleSafeArray、VARTYPE
  10. r5 7530u和i5 1235u选哪个 锐龙r57530u和酷睿i51235u对比