当前位置: 首页 > news >正文

Codeforces Round 821 (Div. 2) C. Parity Shuffle Sorting (构造之全变成一样的)

给你一个数组 a a a ,其中有 n n n 个非负整数。你可以对它进行以下操作。

选择两个索引 l l l r r r ( 1 ≤ l < r ≤ n ) ( 1≤l<r≤n ) (1l<rn)
如果 a l + a r a_l+a_r al+ar 是奇数,则进行 a r : = a l a_r:=a_l ar:=al 运算。如果 a l + a r a_l+a_r al+ar 是偶数,则执行 a l : = a r a_l:=a_r al:=ar .求最多有 n n n 次操作的序列,使得 a a a 不递减。可以证明这总是可能的。需要注意的是,你并不需要尽量减少运算次数。

当且仅当 a 1 ≤ a 2 ≤ … ≤ a n a_1≤a_2≤…≤a_n a1a2an 时,数组 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an 是非递减的。

输入
第一行包含一个整数 t ( 1 ≤ t ≤ 1 0 5 ) t ( 1≤t≤10^5 ) t(1t105) - 测试用例数。

每个测试用例由两行组成。每个测试用例的第一行包含一个整数 n ( 1 ≤ n ≤ 1 0 5 ) n ( 1≤n≤10^5 ) n(1n105) - 数组的长度。

每个测试用例的第二行包含 n n n 个整数 a 1 , a 2 , … , a n ( 0 ≤ a i ≤ 1 0 9 ) a_1,a_2,…,a_n ( 0≤a_i≤10^9 ) a1,a2,,an(0ai109) - 数组本身。

保证所有测试用例中 n n n 的总和不超过 1 0 5 10^5 105

输出
对于每个测试用例,在第一行打印一个整数 m ( 0 ≤ m ≤ n ) m ( 0≤m≤n ) m(0mn),即操作次数。

然后打印 m m m 行。每行必须包含两个整数 l i , r i l_i,r_i li,ri ,即在 i − t h i -th ith 操作中选择的索引 ( 1 ≤ l i < r i ≤ n ) ( 1≤l_i<r_i≤n ) (1li<rin)

如果有多个解,请打印任意一个。


不递增就是 a i < = a i + 1 a_i <= a_{i+1} ai<=ai+1 ,那么就可以取一个特殊情况让所有数都相等,这样就是简单的构造方法。

还需要处理奇偶数的问题。
并且注意读题,奇偶数是操作相反而不是不能操作,本人读题的时候就读了半句话发现题做不出来。

首先让 a [ 1 ] a[1] a[1] a [ n ] a[n] a[n] 相等,如果两者相加是偶数,那么就是让 a [ 1 ] = a [ n ] a[1] = a[n] a[1]=a[n],所以之后的目标就是让所有数都等于 a [ n ] a[n] a[n],相加等于奇数时同理。

以相加为偶数为例,之后,如果中间的任何数和 a [ n ] a[n] a[n] 相加等于奇数,那么就意味着要让 a [ r ] = a [ l ] a[r] = a[l] a[r]=a[l] ,我们要让 a [ l ] = a [ n ] a[l] = a[n] a[l]=a[n],但是题目要求 l < r l < r l<r,所以就输出 1 i,如果中间的任何数和a[n]相加等于偶数,就意味着要让 a [ l ] = a [ r ] a[l] = a[r] a[l]=a[r],那么就让 a [ r ] = a [ n ] a[r] = a[n] a[r]=a[n],就输出 i n


CODE:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;int a[N];void solve(){int n;cin >> n;bool ok = 1;for(int i = 1;i <= n;i++){cin >> a[i];if(a[i] < a[i-1])ok = 0;}if(ok){cout << 0 << endl;return;}cout << n-1 << endl;cout << 1 << ' ' << n << endl;int x;if((a[1] + a[n]) % 2 == 0){x = a[n];}else x = a[1];for(int i = 2;i <= n-1;i++){if((x + a[i]) % 2 != 0)cout << 1 << " " << i << endl;else cout << i << " " << n << endl;}
}int main(){int T;cin >> T;while(T--){solve();}return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 好用的c++11语言特性
  • Python筑基之旅-文件(夹)和流
  • docker-compose 自动管理 数据库
  • 2024/05/25学习记录
  • 20240526每日后端---------分享一些开发必备网站
  • docker安装Elasticsearch(ES)详细教程
  • 2024电工杯参赛经历感受总结
  • PyTorch深度学习实战(44)——基于 DETR 的目标检测模型
  • C++设计模式之单例模式、模板模式、状态模式、原型模式、CRTP 模式、组件模式、观察者模式、发布-订阅模式、访问者模式
  • three.js能实现啥效果?看过来,这里都是它的菜(10)
  • string OJ题
  • 【ai】pycharm安装langchain 相关module
  • 关于linux磁盘告警问题
  • Hadoop 客户端 FileSystem加载过程
  • 前端工具vscode 提交代码git操作
  • 分享的文章《人生如棋》
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【RocksDB】TransactionDB源码分析
  • Android Studio:GIT提交项目到远程仓库
  • angular组件开发
  • EventListener原理
  • JAVA 学习IO流
  • React+TypeScript入门
  • React-生命周期杂记
  • React系列之 Redux 架构模式
  • Redux系列x:源码分析
  • 仿天猫超市收藏抛物线动画工具库
  • 分享一份非常强势的Android面试题
  • 力扣(LeetCode)21
  • 前端之Sass/Scss实战笔记
  • 手写双向链表LinkedList的几个常用功能
  • 探索 JS 中的模块化
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 小程序01:wepy框架整合iview webapp UI
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • AI算硅基生命吗,为什么?
  • 阿里云服务器如何修改远程端口?
  • 数据库巡检项
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $L^p$ 调和函数恒为零
  • (23)Linux的软硬连接
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (js)循环条件满足时终止循环
  • (pycharm)安装python库函数Matplotlib步骤
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (六)Hibernate的二级缓存
  • (十八)SpringBoot之发送QQ邮件
  • (十三)Maven插件解析运行机制
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core引入性能分析引导优化
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net mvc actionresult 返回字符串_.NET架构师知识普及