Codeforces Round 786 (Div. 3) D. A-B-C Sort

 D. A-B-C Sort

  • 步骤 1 :当 a不为空时,从 a中取出最后一个元素,并将其移动到数组 b的中间。如果 b 当前长度为奇数,则可以选择:将 a 中的元素放到 b 中间元素的左边或右边。结果, a 变空, b 由 n 个元素组成。
  • 步骤 2 :当 b不是空数组时,从 b 中取出中间的元素,移动到数组 c 的末尾。如果 b 当前长度为偶数,则可以从两个中间元素中选择一个。结果, b 变空, c 现在由 n 个元素组成。

 听起来很麻烦,但是通过模拟可知:

  • a数组长度n为奇数时,那么a当中第一个元素必定是c数组当中的第一个元素
  • 如果n为偶数时,那么取a头部两个元素的最小值为c元素的第一个元素 

那么我们遍历a数组只需要根据数组长度的变化更改取值同时更新a数组即可

#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define INF 0x3f3f3f3f
#define IOS ios::sync_with_stdio(false); cin.tie(0);
#define int long long
#define pb push_back
#define vct vector
#define checkbit __builtin_popcount
#define gcd __gcd
#define use int T;cin >> T; while (T--)
#define LEN length()
#define all(a) a.begin(), a.end()
template <class T>
bool mmax(T &u, T v) { return u < v ? (u = v, 1) : 0; }
template <class T>
bool mmin(T &u, T v) { return u > v ? (u = v, 1) : 0; }
#define lowbit(x) (x & (-x))
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
using namespace std;
typedef pair<int, int> pii;
const int N = 1e5 + 7;
signed main()
{IOSuse{int n;cin >> n;vct<int> a(n + 5, 1e9 + 7);int mins = 1e9 + 7;for (int i = 1; i <= n; i++){cin >> a[i];mmin(mins, a[i]);}bool isok = 1;if ((n % 2 && a[1] != mins) || (n % 2 == 0 && min(a[1], a[2]) != mins))no;else{if (n % 2){int minx = a[1];int cnt = 0;for (int i = 2; i <= n; i++){if (!cnt & 1){if (min(a[i], a[i + 1]) < minx){isok = 0;break;}minx = min(a[i], a[i + 1]);a[i + 1] = max(a[i], a[i + 1]);}else{if (a[i] < minx){isok = 0;break;}minx = a[i];}cnt ^= 1;}}else{int minx = min(a[1], a[2]);int cnt = 1;a[2] = max(a[1], a[2]);for (int i = 2; i <= n; i++){if (!cnt & 1){if (min(a[i], a[i + 1]) < minx){isok = 0;break;}minx = min(a[i], a[i + 1]);a[i + 1] = max(a[i], a[i + 1]);}else{if (a[i] < minx){isok = 0;break;}minx = a[i];}cnt ^= 1;}}if (isok)yes;else no;}}return 0;
}

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

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

相关文章

第97步 深度学习图像目标检测:RetinaNet建模

基于WIN10的64位系统演示 一、写在前面 本期开始&#xff0c;我们继续学习深度学习图像目标检测系列&#xff0c;RetinaNet模型。 二、RetinaNet简介 RetinaNet 是由 Facebook AI Research (FAIR) 的研究人员在 2017 年提出的一种目标检测模型。它是一种单阶段&#xff08;o…

讲述 什么是鸿蒙 为什么需要鸿蒙 为什么要学习鸿蒙

首先 我们为什么要学习鸿蒙开发&#xff1f; 因为 鸿蒙发展前景巨大 鸿蒙自发布依赖 一直受社会各界关注 强两百的 App厂商 大部分接受了与鸿蒙的合作 硬件也有非常多与鸿蒙合作的厂商 鸿蒙的合作企业基本已经覆盖整个互联网客户的主流需求 所以鸿蒙的崛起不过是早晚的问题 …

[Docker]十.Docker Swarm讲解

一.Dokcer Swarm集群介绍 1.Dokcer Swarm 简介 Docker Swarm 是 Docker 公司推出的用来管理 docker 集群的工具&#xff0c; 使用 Docker Swarm 可以快速方便的实现 高可用集群 ,Docker Compose 只能编排单节点上的容器, Docker Swarm 可以让我们在单一主机上操作来完成对 整…

生物识别访问面临风险

安全公司 Blackwing Intelligence 发现了多个允许您绕过Windows Hello 身份验证的漏洞。 戴尔 Inspiron 灵越 15、联想 ThinkPad T14 和 Microsoft Surface Pro X笔记本电脑上会出现这种情况&#xff0c;原因是设备中集成了来自Goodix、Synaptics 和 ELAN的指纹传感器。 所有…

Python 基础【五】--数据类型-序列【2023.11.24】

1.定义 Python 中的序列是一块可存放多个值的连续内存空间&#xff0c;所有值按一定顺序排列&#xff0c;每个值所在位置都有一个编号&#xff0c;称其为索引&#xff0c;我们可以通过索引访问其对应值。 list1 [Google, Runoob, 1997, 2000] list2 [1, 2, 3, 4, 5 ] list3…

Spring AOP:什么是AOP? 为什么要用AOP?如何学习AOP?

文章目录 &#x1f386;前言1.为什么要用 AOP3.如何学习去 AOP?3.1 AOP 的组成切面&#xff08;Aspect&#xff09;连接点&#xff08;Join Point&#xff09;切点&#xff08;Pointcut&#xff09;通知&#xff08;Advice&#xff09; 3. Spring AOP 实现3.1 普通的方式实现 …

C++设计模式之策略模式

策略模式 介绍示例示例测试运行结果应用场景优点总结 介绍 策略模式是一种行为设计模式。在策略模式中&#xff0c;可以创建一些独立的类来封装不同的算法&#xff0c;每一个类封装一个具体的算法&#xff0c;每一个封装算法的类叫做策略(Strategy)&#xff0c;为了保证这些策…

2.19 keil里面工具EventCorder使用方法

设置方法如下&#xff1a; 添加初始化代码如下&#xff1a; eventRecord.c #include "eventRecord.h" #include "usart.h" extern UART_HandleTypeDef *pcControlUart;/* RecordEvent初始化 */ void InitEventRecorder(void) {#ifdef RTE_Compiler_Even…

【Kotlin精简】第9章 Kotlin Flow

1 前言 上一章节我们学习了Kotlin的协程【Kotlin精简】第8章 协程&#xff0c;我们知道 协程实质是对线程切换的封装&#xff0c;能更加安全实现异步代码同步化&#xff0c;本质上协程、线程都是服务于并发场景下&#xff0c;其中协程是协作式任务&#xff0c;线程是抢占式任务…

Java开发环境配置“JDK”超详细整理,适合新手入门

目录 一、什么是JDK&#xff1f; 二、Java中JDK8、JDK17该怎么选择&#xff1f; 三、JDK和JRE是什么关系&#xff1f; 四、JDK包含的基本组件 五、JDK下载步骤 JDK 安装 1、双击运行安装包&#xff0c;出现安装程序&#xff0c;点击下一步 2、修改JDK安装目录 3、根据…

【Django-DRF】md笔记第6篇:Django-DRF的视图、认证、分页和其他功能详解

本文从分析现在流行的前后端分离Web应用模式说起&#xff0c;然后介绍如何设计REST API&#xff0c;通过使用Django来实现一个REST API为例&#xff0c;明确后端开发REST API要做的最核心工作&#xff0c;然后介绍Django REST framework能帮助我们简化开发REST API的工作。 DR…

算法-中等-链表-两数相加

记录一下算法题的学习11 两数相加 题目&#xff1a;给你两个非空的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照逆序的方式存储的&#xff0c;并且每个节点只能存储一位数字。请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。你可以假设除了数字…