选择交换.

给出长为 n 的序列 a,你可以对序列 a 进行以下操作:
选择 l,r (1 ≤ l,r ≤ n) ,交换 a[l],a[r].

请求出在任意多次操作后,序列 a 能否满足 a[1]+a[n] = a[2]+a[n-1] = a[3]+a[n-2] = ……a[n/2]+a[n+1-(n/2)].
可以证明如果有解,操作次数不大于 n.

输入
第一行包含一个整数 T (1 ≤ T ≤ 1e4),表示测试用例的组数。
每组测试用例的第一行包含一个整数 n (1 ≤ n ≤ 2e5),表示序列 a 的长度。
每组测试用例的第二行包含 n 个整数 a1,a2……,an (1 ≤ ai ≤ 1e9)。
对于所有测试用例,保证 n 的总和不超过 2e5.

输出
对于每组测试用例,如果无解,输出 "NO"。如果有解,第一行输出 "YES",第二行输出一个整数 
m (0≤m≤n),之后 m 行每行输出两个整数 l,r。

Input
2
3
1 2 2
5
3 5 1 4 7

Output
NO
YES
2
3 4
2 5

说明:对于第二组测试用例,交换后的序列为 3 7 4 1 5。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef pair<int,int> PII;
const double PI=acos(-1.0);
const int N=2e6+10;
int n;
struct node
{int x,id;
}a[N];
bool cmp(node a,node b)
{return a.x<b.x;
}
int now[N],w[N];
vector <PII> ans;
void solve()
{cin>>n;for (int i=1;i<=n;i++) {cin>>a[i].x;a[i].id=i;}sort (a+1,a+n+1,cmp);int l=1,r=n;int sum=a[l].x+a[r].x;bool flag=1;while (l<=r)                 //暴力判断{if (a[l].x+a[r].x!=sum){flag=0;break;}l++,r--;}if (!flag) cout<<"NO\n";else {ans.clear();for (int i=1;i<=n;i++){now[i]=i;          //记录每个数现在在哪个位置w[i]=i;            //记录当前下标序列}for (int i=1;i<=n;i++){int to=now[a[i].id];if (to!=i){ans.push_back({i,to});swap(w[i],w[to]);now[w[i]]=i;now[w[to]]=to;}}cout<<"YES\n";cout<<ans.size()<<endl;for (auto [x,y]:ans) cout<<x<<" "<<y<<endl;}
}
signed main()
{ios;int t;cin>>t;while (t--) solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/618233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Mybatis系列】Mybatis空值关联

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Linux 内核学习 2 - 用户程序如何被塞进内核进行调度?

Shell是系统的用户界面&#xff0c;提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。 fork里copy了父进程的信息&#xff0c;并激活task放到运行队列&#xff0c;当系统发生调度并获得执行机会时开始执行&#xff0c;但这时还不是hello程序…

C++力扣题目700--二叉搜索树中的搜索

给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 null 。 示例 1: 输入&#xff1a;root [4,2,7,1,3], val 2 输出&#xff1a;[2,1,…

网络安全全栈培训笔记(52-WEB攻防-通用漏洞弱口令安全社工字典生成服务协议web应用)

第52天 WEB攻防-通用漏洞&弱口令安全&社工字典生成&服务协议&web应用 知识点&#xff1a; 1、弱口令安全&配置&初始化等 2、弱口令对象&Web&服务&应用等 3、弱口令字典&查询&列表&列表等 #前置知识&#xff1a; 弱口令(weak…

getWriter() has already been called for this response

这个错误通常表明您尝试从Spring MVC返回一个已使用的HttpServletResponse对象。 原因&#xff1a;这可能是由于直接调用HttpServletResponse的getWriter()或getOutputStream()方法&#xff0c;或者由于在控制器方法中抛出异常而自动调用HttpServletResponse的write()方法。 修…

python企业级技能

python企业级技能 @contact: 微信 1257309054 @file: 书籍 @time: 2024/1/13 11:16 @author: LDC内容简介 ​ 通过本书籍可以学习到python在企业中是如何使用的,用来解决哪些业务问题? ​ python

C#人力资源管理系统源码

C#人力资源管理系统源码 源码描述&#xff1a; 该系统利用asp.net中mvc,linq搭建开发&#xff0c; 分权限管理 权限级别分为&#xff1a;管理员&#xff0c;经理&#xff0c;专员&#xff0c;员工等 管理员可以管理角色、菜单 经理可以管理 组织规划&#xff0c;员工管理&#…

python,序列的切片

序列的切片就是指从一个序列中取出子序列 语法&#xff1a; 序列[起始下标&#xff1a;结束下标&#xff1a;步长] 步长为1表示一个一个的取元素&#xff0c;步长为2表示每次跳过一个元素的取元素&#xff0c;步长为负数表示反向切片&#xff0c;取元素时取到结束下标&#…

分裂联邦学习论文-混合联邦分裂学习GAN驱动的预测性多目标优化

论文标题&#xff1a;《Predictive GAN-Powered Multi-Objective Optimization for Hybrid Federated Split Learning》 期刊&#xff1a;IEEE Transactions on Communications, 2023 一、论文介绍 背景&#xff1a;联邦学习作为一种多设备协同训练的边缘智能算法&#xff0…

linux 安装sipp

sudo apt-get install libnet1-dev libpcap0.8-dev openssl libssl-dev 从 sipp - Browse /sipp/3.2 at SourceForge.net 下载最新版的sipp.svn.tar.gz&#xff0c;解压之后就得到一个rpm文件 tar -zxvf sipp.svn.tar.gz cd sipp make pcapplay_ossl

SpringBoot中 如何优雅的 重试调用 第三方API?

引言 在实际的应用中&#xff0c;我们经常需要调用第三方API来获取数据或执行某些操作。然而&#xff0c;由于网络不稳定、第三方服务异常等原因&#xff0c;API调用可能会失败。为了提高系统的稳定性和可靠性&#xff0c;我们通常会考虑实现重试机制。 本文将深入探讨如何在…

MySQL深入——12

我们今天来谈谈临键锁 next-key lock&#xff08;临键锁&#xff09;是记录锁与间隙锁的结合&#xff0c;锁定一个范围。 他被主要应用于解决幻读的问题 临键锁的几个要点&#xff1a; 1.他是前开后闭区间 2.查找过程中访问到的对象会加锁 优化&#xff1a;1.在索引上的等…

2401C++,C++模板用来解耦

原文 模板还可用来解耦. 看这样一个场景: 类 连接 { 公:空 发送() {//干活输出<<缓冲_<<"\n";//...} 私:串 缓冲_; };有这样一个连接对象,它里面有个发送函数,发送的逻辑比较复杂(这里省略具体逻辑),然后刚好另外一个A对象可复用这部分代码,于是就把发送…

多语言生成式语言模型用于零样本跨语言事件论证提取(ACL2023)

1、写作动机&#xff1a; 经过预训练的生成式语言模型更好地捕捉实体之间的结构和依赖关系&#xff0c;因为模板提供了额外的声明性信息。先前工作中模板的设计是依赖于语言的&#xff0c;这使得很难将其扩展到零样本跨语言转移设置。 2、主要贡献&#xff1a; 作者提出了一…

AI-图片转换中国风动漫人物

&#x1f3e1; 个人主页&#xff1a;IT贫道-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;私聊博主加WX好友&#xff0c;获取更多资料哦~ &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. AI卡通秀原理 2. …

【PyQt小知识 - 8】:QFileDialog — 文件选择对话框(选择文件夹/文件)

文章目录 QFileDialog的介绍和使用 QFileDialog的介绍和使用 QFileDialog是Qt框架中提供的一个文件选择对话框。它可以让用户通过图形界面的方式选择文件或目录&#xff0c;并提供了许多与文件操作相关的实用功能&#xff0c;例如文件过滤、文件类型限制、文件名默认值、默认目…

17. C++ static、const 和 static const 类型成员变量声明以及初始化

1. C static、const 和 static const 类型成员变量声明以及初始化 const 定义的常量在超出其作用域之后其空间会被释放&#xff1b; static 定义的静态常量在函数执行后不会释放其存储空间&#xff1b; 1.2 static static 表示的是静态的 类的静态成员函数、静态成员变量是…

ASP.NET进销存系统源码

ASP.NET进销存系统源码 功能介绍&#xff1a; 财务 销售清单&#xff0c;填写销售单&#xff0c;客户管理&#xff0c;添加客户资料 销售 销售清单&#xff0c;填写销售单&#xff0c;客户管理&#xff0c;添加客户资料 仓库 仓库结存&#xff0c;仓库盘点&#xff0c;盘点结…

初学unity学习七天,经验收获总结

初学unity七天&#xff0c;经验收获总结 学习就是认识新观念和新想法的过程。 假如人们始终以同一种思维方式来考虑问题的话&#xff0c;那么始终只会得到同样的结果。 因为我对你讲述的许多内容是你以前从未接触过的&#xff0c;所以我建议你&#xff0c;在你还没有做之前&…

确保CentOS系统中的静态HTTP服务器的数据安全

确保CentOS系统中的静态HTTP服务器的数据安全是一项重要的任务&#xff0c;它有助于保护网站免受未经授权的访问、数据泄露和其他安全威胁。以下是一些关键步骤和最佳实践&#xff0c;以确保CentOS系统中静态HTTP服务器的数据安全&#xff1a; 限制访问权限确保只有授权用户可…