Codeforces Round #636 (Div. 3) D.Constant Palindrome Sum
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相关推荐
- Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum 思维 + 差分
传送门 文章目录 题意: 思路: 题意: 思路: 首先有一个显然的性质就是每组操作最多不会超过两次. 很容易想到一个很暴力的思路,就是枚举x∈[1,2∗k]x \in [1,2*k]x∈[1,2∗k] ...
- Codeforces Round #636 (Div. 3)D. Constant Palindrome Sum
传送门-链接 题意:输入一个n和k,第二行输入一个长度为n的数组a,且保证了n为一个偶数,数组a中的每一个元素都不大于k,你可以修改多次,使得a[i]+a[n-i+1]=x(x为某个确定的值),你需要 ...
- 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+ ...
- Codeforces Round #636 (Div. 3)
Codeforces Round #636 (Div. 3)(2020.4.21) A.Candies 因为题目保证了有解,所以我们枚举一下 k k k就行了. #include <bits/s ...
- Codeforces Round #636 (Div. 3) F. Restore the Permutation by Sorted Segments 思维 + 暴力
传送门 文章目录 题意: 思路: 题意: n≤200n\le200n≤200 思路: 首先关注到rrr从[2,n][2,n][2,n]都出现一次,所以很明显最后一个位置只出现一次,但是这样倒着来不是很 ...
- Codeforces Round #636 (Div. 3) E. Weights Distributing 思维 + bfs
传送门 文章目录 题意: 思路: 题意: n≤2e5,m≤2e5n\le2e5,m\le2e5n≤2e5,m≤2e5 思路: 怎么感觉每场div3div3div3都有一个巧妙的图论题. 首先如果只有两 ...
- 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 ...
- Codeforces Round #636 (Div. 3) 题解
A. Candies 查看题解 数学 B. Balanced Array 查看题解 数学 C. Alternating Subsequence 查看题解 贪心 D. Constant Palindro ...
- Codeforces Round #636 (Div. 3) A-D
A. Candies 题意 给定一个整数,判断是否存在 思路 先对公式进行预处理 明显是一个等比数列 化简后得到 因为答案一定存在 所以用快速幂从小到大枚举即可 #include<iostrea ...
最新文章
- 随办 企业打造完美执行团队的终极利器
- 关于python中程序流程结构-Python语言程序设计(第4章:程序结构设计)
- PostgreSQL参数优化对比性能测试
- JDK之ConcurrentHashMap
- 渭南java_渭南java语言入门教程视频
- Linux中Shell循环结构for用法笔记
- java调用js匿名函数参数,js匿名函数作为函数参数详解
- mysql常用操作指令总结
- Android脚本打包
- git安装 perl ubuntu_Ubuntu系统上安装Git
- CentOS 7.X配置连接网络
- SmartView函数HypSetActiveConnection使用
- 【数据库】MySQL单表查询
- 中兴配置dhcp服务器,中兴F623路由器如何投入使用dhcp服务器
- 技术团队管理:技术分享
- java 渲染_Java字体渲染
- python win32gui模块详解_Python笔记_第二篇_面向过程_第二部分_4.常用模块的简单使用_窗体控制模块(win32con、win32gui)...
- 驱动VS1003要注意的事项
- 最大公约数和最小公倍数实现
- 面试题(一)- 谈谈你对数据库中索引的理解