题意

多组样例

给一个长度为\(n\)(\(n\)一定为偶数)的数组\(a[]\),给一个正整数\(k\),保证数组内元素为小于等于\(k\)的正整数,你可以每次将数组的一个元素变为小于等于\(k\)的正整数,问最少多少次操作后,数组能满足对于任意\(i\),有\(a[i]+a[n-i+1]=x\),\(x\)为任意值,即所有\(a[i]+a[n-i+1]\)相等

分析

枚举\(x\)然后判定肯定是不现实的,考虑分析\(a[i]+a[n-i+1]\)的性质,此处设\(j=n-i+1\)

  • 两个数字都不改变,得到的和为\(a[i]+a[j]\)
  • 改变一个数字,可以得到的和为\([\min(a[i],a[j])+1,\max(a[i],a[j])+k]\)区间中的任意一个数(将较大数变为\(1\)得到最小和,将较小数变为\(k\)得到最大和)
  • 改变两个数字,可以得到的和为\([2,2*k]\)区间中的任意一个数

综上,对于(\(i,j)\),对于\([2,\min(a[i],a[j])]\)的贡献为\(2\),对于\([\min(a[i],a[j])+1,a[i]+a[j]-1]\)的贡献为\(1\),对于\(a[i]+a[j]\)的贡献为\(0\),对于\([a[i]+a[j]+1,\max(a[i],a[j])+k]\)的贡献为\(1\),对于\([\max(a[i],a[j])+k+1,2*k]\)的贡献为\(2\)

遍历每一组数字,我们可以得到这对数字对\([2,2*k]\)区间内的\(x\)的贡献,然后取操作数最小的\(x\)的操作数即可

由于是区间贡献,采取前缀和数组或者树状数组皆可,这里采取前缀和数组

#pragma GCC optimize(3, "Ofast", "inline")

#include <bits/stdc++.h>

#define start ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
//#define int ll
#define ls st<<1
#define rs st<<1|1
#define pii pair<int,int>
#define rep(z, x, y) for(int z=x;z<=y;++z)
#define com bool operator<(const node &b)
using namespace std;
const int maxn = (ll) 4e5 + 5;
const int mod = (ll) 1e9 + 7;
const int inf = 0x3f3f3f3f;
int T = 1;
int n, a[maxn], k;
int sum[maxn]; void solve() {
cin >> n >> k;
rep(i, 1, n)cin >> a[i];
rep(i, 1, 2 * k)sum[i] = 0;
rep(i, 1, n / 2) {
int now = a[i] + a[n - i + 1];
int maxx = max(a[i], a[n - i + 1]) + k + 1;
sum[2] += 2;
--sum[min(a[i], a[n - i + 1]) + 1];
--sum[now];
++sum[now + 1];
++sum[maxx];
}
int ans = inf;
rep(i, 2, 2 * k)sum[i] = sum[i - 1] + sum[i], ans = min(ans, sum[i]);
cout << ans << '\n';
} signed main() {
start;
cin >> T;
while (T--)
solve();
return 0;
}

CodeForces 1343D Constant Palindrome Sum的更多相关文章

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

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

  2. Constant Palindrome Sum(贪心*RMQ)

    传送门 怎么说呢,想了几个小时没做出来实在可惜. \(\color{Red}{首先肯定想到暴力嘛!但是x定值有那么多值可以取,怎么办呢?}\) 但是题目中有一个很关键的条件 \[a[i]>=1\ ...

  3. Codeforces 963 A. Alternating Sum(快速幂,逆元)

    Codeforces 963 A. Alternating Sum 题目大意:给出一组长度为n+1且元素为1或者-1的数组S(0~n),数组每k个元素为一周期,保证n+1可以被k整除.给a和b,求对1 ...

  4. [Codeforces 280D]k-Maximum Subsequence Sum(线段树)

    [Codeforces 280D]k-Maximum Subsequence Sum(线段树) 题面 给出一个序列,序列里面的数有正有负,有两种操作 1.单点修改 2.区间查询,在区间中选出至多k个不 ...

  5. Codeforces Educational Codeforces Round 5 E. Sum of Remainders 数学

    E. Sum of Remainders 题目连接: http://www.codeforces.com/contest/616/problem/E Description The only line ...

  6. ●CodeForces 280D k-Maximum Subsequence Sum

    题链: http://codeforces.com/problemset/problem/280/D 题解: 神题,巨恶心.(把原来的那个dp题升级为:序列带修 + 多次询问区间[l,r]内取不超过k ...

  7. Codeforces 280D k-Maximum Subsequence Sum [模拟费用流,线段树]

    洛谷 Codeforces bzoj1,bzoj2 这可真是一道n倍经验题呢-- 思路 我首先想到了DP,然后矩阵,然后线段树,然后T飞-- 搜了题解之后发现是模拟费用流. 直接维护选k个子段时的最优 ...

  8. CodeForces 1060 B Maximum Sum of Digits

    Maximum Sum of Digits You are given a positive integer n. Let S(x)S(x) be sum of digits in base 10 r ...

  9. Codeforces 622 F. The Sum of the k-th Powers

    \(>Codeforces \space 622\ F. The\ Sum\ of\ the\ k-th\ Powers<\) 题目大意 : 给出 \(n, k\),求 \(\sum_{i ...

  10. BZOJ 3836 Codeforces 280D k-Maximum Subsequence Sum (模拟费用流、线段树)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=3836 (Codeforces) http://codeforces.com ...

随机推荐

  1. 在DevExpress中使用BandedGridView表格实现多行表头的处理

    在之前较早随笔中介绍过实现多行表头的处理,通过手工创建字段以及映射数据源字段属性的方式实现,有些客户反映是否可以通过代码方式更方便的创建对应的处理操作,因此本篇随笔继续探讨这个多行表头的处理的操作,使 ...

  2. 通过nc获取靶机的反弹Shell [靶机实战]

    1.环境 Kali:172.30.1.3/24 靶机(Funbox9):172.30.1.129/24 2.信息收集 通过nmap扫描此主机,我们需要获取到开放的端口以及服务的Banner 1 nma ...

  3. Kubernetes(k8s)一次性任务:Job

    目录 一.系统环境 二.前言 三.Kubernetes Job简介 四.创建一次性任务job 4.1 创建一个简单任务的job 4.2 创建需要执行多次的job任务 五.测试job失败重试次数 六.j ...

  4. 使用 ChatGPT 的 7 个技巧 | Prompt Engineering 学习笔记

    概述 前段时间在 DeepLearning 学了一门大火的 Prompt 的课程,吴恩达本人授课,讲的通俗易懂,感觉受益匪浅,因此在这里总结分享一下我的学习笔记. 为什么要学习 Prompt ? 因为 ...

  5. vulnhub_jangow

    来源 vulnhub:https://www.vulnhub.com/entry/jangow-101,754/ 描述 难度:简单 这在 VirtualBox 而不是 VMware 上效果更好 我这里 ...

  6. 关于进程、线程、协程的概念以及Java中的应用

    进程.线程.协程 本文将从"操作系统"."Java应用"上两个角度来探究这三者的区别. 一.进程 在我本人的疑惑中,我有以下3个问题. 1.1为什么要引入进程? ...

  7. C++面试八股文:了解位运算吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第12面: 面试官:了解位运算吗? 二师兄:了解一些.(我很熟悉) 面试官:请列举以下有哪些位运算? 二师兄:按位与(&).按位或(|).按位 ...

  8. vivo 帐号服务稳定性建设之路-平台产品系列06

    作者:vivo 互联网平台产品研发团队- Shi Jianhua.Sun Song 帐号是一个核心的基础服务,对于基础服务而言稳定性就是生命线.在这篇文章中,将与大家分享我们在帐号稳定性建设方面的经验 ...

  9. Junit4 一直处于运行中的排查过程

    新买了一个Macbook Pro . 之前的工程搬家过来, 这天要跑个单元测试. 发现Junit4 一直处于运行中.没有错误信息,没有用例执行结果.遂开始排查原因. 这里插一句,苹果芯片的Mbp还是很 ...

  10. 自然语言处理 Paddle NLP - 开放域对话系统-理论

    常见的对话系统 个人助手 •Apple Siri, Amazon Alexa, Baidu Xiaodu 客户服务•餐厅预定.商品咨询.债务催收 休闲娱乐 •Microsoft XiaoIce,Rep ...