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

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()
{IOS
	use
	{
		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.kler.cn/a/146483.html

相关文章:

  • 使用 Docker 部署 Java 项目(通俗易懂)
  • HCIP-VLAN-hybrid接口+DHCP实验
  • 【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理
  • 解决报错:未定义标识符 “M_PI“
  • 3.Qt Quick-QML地图引擎之v4.3版本(新增动态轨迹线/海图/天地图街道/天地图卫星)
  • Linux内核的启动
  • 马养殖场建设VR模拟实训教学平台具有灵活性和复用性
  • 图论|知识图谱——详解自下而上构建知识图谱全过程
  • 智能电子会议桌牌
  • SWT技巧
  • C++ 红黑树插入详解
  • Calling COBOL Modules 调用COBOL模块
  • 【C/C++】如何不使用 sizeof 求数据类型占用的字节数
  • [element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案
  • ArrayList类
  • 编程中的解密之路:挑战、创新与技术难题的探索
  • 二十七、RestClient查询文档
  • 跨链原子交换
  • 《微信小程序开发从入门到实战》学习三十二
  • Spring Boot + hutool 创建海报图片
  • Typescript和Javascript的区别是什么?一文带您了解Typescript排名飙升的原因!
  • Open3D库进行点云的DBSCAN密度聚类和可视化 c++ 代码
  • 【Java】使用IntelliJ IDEA搭建SSM(MyBatis-Plus)框架并连接MySQL数据库
  • 【开源】基于Vue和SpringBoot的木马文件检测系统
  • 在Linux中对Docker中的服务设置自启动
  • 一起学docker系列之八使用 Docker 安装配置 MySQL