「Codeforces」B. Odd Swap Sort

news/2024/10/18 8:32:06/

B. Odd Swap Sort

https://codeforces.com/contest/1638/problem/B

题目描述

有一个数组A,遍历这个数组,若 a i + a i + 1 a_i+a_{i+1} ai+ai+1 的和为奇数,则交换这两个数的位置 s w a p ( a i , a i + 1 ) swap(a_i, a_{i+1}) swap(ai,ai+1) ,使得最终得到的序列是一个非递减的序列。

输入描述

第一行包含一个 T (1≤t≤105) 表示为测试用例数量

每个测试用例的第一行包含一个整数 n (1≤n≤105) — 数组的长度。

每个测试用例的第二行包含 n 个整数 a1,a2,…,an (1≤ai≤109) — 数组的元素。

输出描述

是否为一个非递减序列:Yes 或 No

样例

#1

4
4
1 6 31 14
2
4 2
5
2 9 6 7 10
3
6 6 6
Yes
No
No
Yes

#2

1
5
2 9 6 2 10
No

提示

解析

这题目其实是可以模拟的,不过复杂度为 O ( n 2 ) O(n^2) O(n2) ,数据量很大,因此必然为 TLE。

我们分析一下,题目说 a i + a i + 1 a_i + a_{i+1} ai+ai+1 的和为奇数时才可以交换位置,那么可知如下信息:

  1. 要交换两个数字必然是一奇一偶,因为只有这样才可以得到奇数。
  2. 偶数相连或奇数相连的必然为偶数,因此必然无法交换位置。

上面的第二条信息,既然偶数相连或奇数相连都不可能交换位置,那么如果要保证最终的结果为非递减序列,那么所有的偶数序列和奇数序列都必须是非递减的才行。

例如: [ 1 , 2 , 5 , 4 , 3 , 6 ] [1, 2, 5, 4, 3, 6] [1,2,5,4,3,6] 可以分别得到偶数序列 [ 2 , 4 , 6 ] [2, 4, 6] [2,4,6] 和奇数序列 [ 1 , 5 , 3 ] [1, 5, 3] [1,5,3] ,会发现无论如何交换最终也避免不了 5 和 3。

  • 第一次交换: [ 1 , 2 , 4 , 5 , 3 , 6 ] [1, 2, 4, 5, 3, 6] [1,2,4,5,3,6] (5+4=9 为奇数,一奇一偶可以交换)
  • 第二次交换: [ 1 , 2 , 4 , 5 , 3 , 6 ] [1, 2, 4, 5, 3, 6] [1,2,4,5,3,6] (5+3=8 为偶数,两个奇数无法交换)

因此我们只需要判断偶数序列和奇数序列是否都是递增的就行。

AC Code

public class Main {static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));static StreamTokenizer st = new StreamTokenizer(br);static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));public static void main(String[] args) throws Exception {int T = nextInt();while(T-- != 0) {int n = nextInt();int[] A = new int[n+1];for(int i = 1; i <= n; i++) A[i] = nextInt();int even = 0, odd = 0; // 偶数和奇数boolean flag = true; // 默认最终是递增序列for(int i = 1; i <= n; i++) {if(A[i] % 2 == 0) { // 偶数序列if(A[i] >= even) even = A[i]; // 是否递增else {flag = false;break;}} else { // 奇数序列if(A[i] >= odd) odd = A[i]; // 是否递增else {flag = false;break;}}}out.println(flag ? "Yes" : "No");}out.flush();}public static int nextInt() throws Exception {st.nextToken();return (int) st.nval;}
}

http://www.ppmy.cn/news/58082.html

相关文章

刷题4.28

1、 开闭原则软件实体&#xff08;模块&#xff0c;类&#xff0c;方法等&#xff09;应该对扩展开放&#xff0c;对修改关闭&#xff0c;即在设计一个软件系统模块&#xff08;类&#xff0c;方法&#xff09;的时候&#xff0c;应该可以在不修改原有的模块&#xff08;修改关…

Ubuntu20.04 交叉编译Paddle-OCR

第一步&#xff1a;交叉编译Paddle-Lite 参考链接&#xff1a;https://blog.csdn.net/sz76211822/article/details/130466597?spm1001.2014.3001.5501 第二步&#xff1a;交叉编译opencv4.x 参考链接&#xff1a;https://blog.csdn.net/sz76211822/article/details/13046168…

不是那么快乐的五一

大家好&#xff0c;我是记得诚。 五一假期结束了&#xff0c;明天开始上班了。 这个假期没休息好&#xff0c;也没出去玩。 放假前一天&#xff0c;接到通知让加班。 第一天就去公司加班了&#xff0c;属实很难受&#xff0c;我心想如果别人有了出远门的安排&#xff0c;还…

mysql5.7以上的启动、停止、赋权命令

文章目录 1、启动mysql server2、查看初始密码3、本地登陆mysql4、修改本地root用户密码5、防火墙设置6、开启mysql的远程登录 1、启动mysql server systemctl start mysqld #启动程序 systemctl enable mysqld #开机自运行 systemctl status mysqld #查看状态…

CSS布局基础(网页图片 切图)

网页图片 网页图片图片格式 切图直接从 psd 图层导出切片工具切图插件切图其他设计工具 网页图片 图片格式 jpg/jpeg 高清图gif 小动画&#xff0c;支持透明背景png 结合jpg 和 gif 支持透明背景&#xff0c;高清psd ps专属格式&#xff0c;常用于设计稿&#xff0c;里面的素…

000-搭建Gitea-自己的git服务器

000-搭建Gitea-自己的git服务器 1.什么是gitea 官网的介绍是&#xff1a; Gitea的首要目标是创建一个极易安装&#xff0c;运行非常快速&#xff0c;安装和使用体验良好的自建 Git 服务。我们采用Go作为后端语言&#xff0c;这使我们只要生成一个可执行程序即可。并且他还支持…

服务器性能调优

硬件 如果是硬件瓶颈就换硬件 &#xff08;包括CPU、内存、网卡、硬盘&#xff09; 软件 &#xff08;软件&#xff0c;特指我们写代码的那部分程序&#xff09; 建议先 top 看下软件瓶颈在哪&#xff0c;CPU、内存、网络&#xff08;netstat&#xff09;&#xff0c;哪个进…

DAY 50 LVS负载均衡器 NAT模式

群集概述 群集的含义 Cluster&#xff0c;集群、群集由多台主机构成&#xff0c;但对外只表现为一一个整体&#xff0c;只提供一-个访问入口(域名或IP地址)&#xff0c; 相当于一台大型计算机。 为什么使用群集 互联网应用中&#xff0c;随着站点对硬件性能、响应速度、服务…