P14917 [GESP202512 五级] 数字移动

P14917 GESP202512 五级 数字移动

题目描述

小 A 有一个包含 NNN 个正整数的序列 A={A1,A2,⋯ ,AN}A=\{A_1,A_2,\cdots,A_N\}A={A1,A2,⋯,AN},序列 AAA 恰好包含 N2\frac{N}{2}2N 对不同的正整数。形式化地,对于任意 1≤i≤N1 \le i \le N1≤i≤N,存在唯一一个 jjj 满足 1≤j≤N,i≠j,Ai=Aj1\le j \le N, i\neq j, A_i=A_j1≤j≤N,i=j,Ai=Aj。

小 A 希望每对相同的数字在序列中相邻,为了实现这一目的,小 A 每次操作会选择任意 i(1≤i≤N)i(1\le i\le N)i(1≤i≤N),将当前序列的第 iii 个数字移动到任意位置,并花费对应数字的体力。

例如,假设序列 A={1,2,1,3,2,3}A=\{1,2,1,3,2,3\}A={1,2,1,3,2,3},小 A 可以选择 i=2i=2i=2,将 A2=2A_2=2A2=2 移动到 A3=1A_3=1A3=1 的后面,此时序列变为 {1,1,2,3,2,3}\{1,1,2,3,2,3\}{1,1,2,3,2,3},耗费 222 点体力。小 A 也可以选择 i=3i=3i=3,将 A3=1A_3=1A3=1 移动到 A2=2A_2=2A2=2 的前面,此时序列变为 {1,1,2,3,2,3}\{1,1,2,3,2,3\}{1,1,2,3,2,3},花费 111 点体力。

小 A 可以执行任意次操作,但他希望自己每次花费的体力尽可能小。小 A 希望你能帮他计算出一个最小的 xxx,使得他能够在每次花费的体力均不超过 xxx 的情况下令每对相同的数字在序列中相邻。

输入格式

第一行一个正整数 NNN,代表序列长度,保证 NNN 为偶数。

第二行包含 NNN 个正整数 A1,A2,...,ANA_1,A_2,\ldots,A_NA1,A2,...,AN,代表序列 AAA。且对于任意 1≤i≤N1\le i\le N1≤i≤N,存在唯一一个 jjj 满足 1≤j≤N,i≠j,Ai=Aj1\le j\le N,i\neq j,A_i=A_j1≤j≤N,i=j,Ai=Aj。

数据保证小 A 至少需要执行一次操作。

输出格式

输出一行,代表满足要求的 xxx 的最小值。

输入输出样例 #1

输入 #1

复制代码
6
1 2 1 3 2 3

输出 #1

复制代码
2

说明/提示

对于 40%40\%40% 的测试点,保证 1≤N,Ai≤1001\le N,A_i\le 1001≤N,Ai≤100。

对于所有测试点,保证 1≤N,Ai≤1051\le N,A_i\le 10^51≤N,Ai≤105。

cpp 复制代码
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;	// 严格要求 (将long long 类型取别名)
ll a[1000100], b[1000100];
bool func(ll n, ll mid){
	memset(b, 0, sizeof(b));
	ll t = 1;
	for(ll i = 1; i <= n; i++){
		if(a[i] > mid){
			b[t++] = a[i];
		}
	}
	
	for(ll i = 1; i <= t - 1; i += 2){	//已经确保i不会访问到最后的元素 
		if(b[i] != b[i + 1]){
			return false;
		}
	}
	return true;
} 
int main(){
	ios :: sync_with_stdio(0);	// 提高cin、cout的运行速度
	cin.tie(0);
	cout.tie(0);
	
	ll n, maxn = -1e9;
	cin >> n;
	
	for(ll i = 1; i <= n; i++){
		cin >> a[i];
		maxn = max(maxn, a[i]);	//输入的最大值 等一会二分要用 
	}
	
	ll l = 1, r = maxn;
	
	while(l < r){
		ll mid = (l + r) / 2;
		if(func(n, mid)){	//如果符合x要求可能就大了 
			r = mid;
		}
		else{	//否则x就可能要求小了 
			l = mid + 1;
		}
	}
	cout << l << endl;	//最后l == r 

    return 0;
}
相关推荐
happyprince1 天前
01-整体观-Codex全貌解读(源码)
算法·ai编程
俊基科技1 天前
别自己写算法了,让这颗37.5毫米的模组替你“闭嘴干活”
神经网络·算法·硬件开发·ai降噪·语音模块·回音消除
千里码aicood1 天前
基于Python的电商数据采集系统(大数据+爬虫)
开发语言·python
_Narcissus_1 天前
动态规划初探(含完整代码实现)
c语言·数据结构·c++·算法·动态规划·背包问题·最短路径
陈皮波比茶1 天前
Python项目实战-网络机器人(爬虫)
开发语言·网络·爬虫·python·机器人
白猫不黑1 天前
网络安全/信息安全专业学习路线与入行指南:从大学到岗位的完整规划
网络·学习·安全·web安全·网络安全·黑客技术
世人万千丶1 天前
鸿蒙项目实战 - 社区活动编排板:标签云布局算法与自动换行
学习·算法·华为·harmonyos·鸿蒙
zander2581 天前
LeetCode 279. 完全平方数
算法·深度优先
法哥20121 天前
用 C++ 控制 CMW100,到底在干什么?
开发语言·c++