【题解】CF1993D

news2024/11/13 12:43:41

目录

  • 翻译
  • 思路
  • 总代码

翻译

原题链接
在这里插入图片描述

思路

  容易发现,无论如何操作,最后剩下的数量是一定的,记剩下的数组中中位数的位置为 m m m(从1开始记),注意不能将数组删空。有:

剩余数组的长度 L = ( n − 1 ) m o d    k + 1 L=(n-1) \mod k + 1 L=(n1)modk+1
m = ( L + 1 ) / 2 m = (L + 1) / 2 m=(L+1)/2

  显然我们需要一个 O ( n l o g n ) O(nlogn) O(nlogn)的算法,根据经验,注意到中位数具有可二分性(显然尽量把小的数删掉中位数肯定大)。所以二分答案中位数是多少,然后 c h e c k check check这个中位数是否可行。

  对于判断环节,我们可以设计一个函数,寻找一种方案,使删除后剩下的数中小于 x x x的最小数量 c n t cnt cnt,那如果 c n t < m cnt < m cnt<m,,则说明存在可行的中位数 y y y,使得 y < x y<x y<x。根据这些,我们可以写出二分的框架:

int count(int x) {
	return 剩下的数中小于x的最小数量cnt
} 

int m = ((n-1) % k + 1 + 1) / 2;
int l = 1, r = 1e9, ans=-1;
while(l<=r) {
	int mid = l+r>>1;
	if(count(mid) < m) {   // 最少比mid小的数量比m少 
		ans = mid;
		l = mid + 1; 
	} else {
		r = mid - 1;
	}
} 
cout<<ans<<endl;

  接下来完善 c o u n t count count函数。采用 d p dp dp的方式,记 f [ i ] f[i] f[i]表示到第 i i i个数时小于 x x x的数量的最小值(允许不拿 a [ i ] a[i] a[i]),则:

f [ i ] = m i n ( f [ i − 1 ] + ( a [ i ] < x ? 1 : 0 ) , f [ i − k ] ( i f i > = k ) ) f[i]=min(f[i-1]+(a[i]<x?1:0), f[i-k] \quad (if \quad i>=k)) f[i]=min(f[i1]+(a[i]<x?1:0),f[ik](ifi>=k))

  但这样会有一个问题,如果 k ∣ n k | n kn,则这个 d p dp dp会找到一种方案,将所有数都删除,最终返回 0 0 0
  为了解决这个问题,我们标记一下当前方案是否为空即可,即将 f f f数组新增大小为 2 2 2的一维,最后返回 f [ n ] [ 1 ] f[n][1] f[n][1]。递推式子稍微改一改即可,代码如下:

for(int i=0;i<=n;i++) f[i][0] = f[i][1] = 1e9;
f[0][0] = 0;
for(int i=1;i<=n;i++) {
	f[i][1] = min(f[i-1][0], f[i-1][1]) + (a[i] < x ? 1 : 0);
	if(i>=k) {
		f[i][0] = min(f[i][0], f[i-k][0]);
		f[i][1] = min(f[i][1], f[i-k][1]);
	}
} 
return f[n][1];

总代码

#include<bits/stdc++.h>
#define N 500005
using namespace std;
int t, n, k, a[N], f[N][2];
int count(int x) {
	// 使小于x的数最少
	// f[i]表示到i,i可以被删除 , 标记是否为空 
	for(int i=0;i<=n;i++) f[i][0] = f[i][1] = 1e9;
	f[0][0] = 0;
	for(int i=1;i<=n;i++) {
		f[i][1] = min(f[i-1][0], f[i-1][1]) + (a[i] < x ? 1 : 0);
		if(i>=k) {
			f[i][0] = min(f[i][0], f[i-k][0]);
			f[i][1] = min(f[i][1], f[i-k][1]);
		}
	} 
	return f[n][1];
} 
int main() {
	cin>>t;
	while(t--) {
		cin>>n>>k;
		int m = ((n-1) % k + 1 + 1) / 2;  // 第m个数为中位数
		for(int i=1;i<=n;i++) {
			cin>>a[i];
		}
		int l = 1, r = 1e9, ans=-1;
		while(l<=r) {
			int mid = l+r>>1;
//			printf("%d %d\n", mid, count(mid));
			if(count(mid) < m) {   // 最少比mid小的数量比m少 
				ans = mid;
				l = mid + 1; 
			} else {
				r = mid - 1;
			}
		} 
		cout<<ans<<endl;
	}
	return 0;
} 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows@移除资源管理器中的网盘等软件的图标@一键移除方案

文章目录 abstract设置方案移除注册表(不推荐单独使用)设置访问权限GUI设置powershell方案 利用powershell设置相应注册表(一键执行脚本)移除所有用户对指定注册表路径的访问权限移除所有权限但保留管理员&#x1f47a; abstract 国内的云盘等软件比如百度网盘,夸克网盘,wps等…

轻量级模型汇总解读——涉及MobileNet、ShuffleNet、GhostNet、EfficientNet、NasNet、轻量transformer

前言&#xff1a;最近需要将模型移植到瑞芯微rv1106上运行&#xff0c;相比于rv1126 NPU的2.0T算力&#xff0c;它的算力更小&#xff0c;只支持0.5T的算力&#xff0c;而且rv1106目前只支持int8量化&#xff0c;为了保证模型推理在满足精度要求的情况下&#xff0c;保证时间尽…

基于C++实现(控制台)停车场管理系统

停车场管理系统设计报告 1 需求分析 1.1问题描述 停车场内只有一个可停放 n 辆汽车的狭长通道&#xff0c;且只有一个大门可供汽车进出。 汽车在停车场内按车辆到达时间的先后顺序&#xff0c;依次由北向南排列&#xff08;大门在最南端&#xff0c;最先到达的第一辆车停放…

Python_两个jpg图片文件名称互换

项目场景 处理Adobe Photoshop导出的两个切片的顺序错误问题 小编在进行图片切片处理的时候&#xff0c;发现用PS导出的切片顺序错误&#xff0c;例如用PS导出的切片分别为test_01.jpg&#xff0c;test_02.jpg&#xff0c;但实际的使用需求是将两个图片的顺序调换&#xff0c…

IC开发——Verilog简明教程

1. 基础概念 1.1. 逻辑值 逻辑0&#xff0c;低电平&#xff0c;对应电路中接地GND。 逻辑1&#xff0c;高电平&#xff0c;对应电路中的电源VCC。 逻辑Z&#xff0c;高阻态&#xff0c;对应电路的悬空。 逻辑X&#xff0c;未知态&#xff0c;数据仿真中可能存在&#xff0c;如…

Delphi Web和Web服务开发目前有哪些选择

Delphi Web和Web服务开发目前有哪些选择 Delphi Web和Web服务开发目前有以下几个选择&#xff1a; Delphi MVC Framework&#xff08;https://github.com/delphimvcframework/delphimvcframework&#xff09;&#xff1a;这是一个开源的Delphi Web框架&#xff0c;基于MVC&am…

小程序uniapp关闭手势返回操作

需求&#xff1a;进入当前页面后&#xff0c;无法返回其他页面&#xff0c;禁止所有返回操作&#xff08;手势返回、左上角返回按钮等&#xff09; 解决&#xff1a; 方法一&#xff1a;wx.enableAlertBeforeUnload wx.enableAlertBeforeUnload 在onLoad里调用&#xff1a; on…

-isystem isystem 实验记录

1&#xff0c;isystem 的理论 2&#xff0c;实验方案 $ tree . ├── inc111 │ └── test.h ├── inc222 │ └── test.h └── src ├── a.out └── hello.c inc111/test.h: #pragma once#define NUM 111 inc222/test.h #pragma once#define N…

2024年9月中国数据库排行榜:openGauss系多点开花,根社区优势明显

在墨天轮发布的9月中国数据库流行度排行榜中&#xff0c;中国数据库产业格局进一步聚集刷新&#xff0c;呈现出3大显著特征&#xff1a; 开源势力力争上游显优势领先潮流&#xff1b;openGauss 开源根社区优势明显&#xff1b;阿里华为两极鼎立云上云下各争先&#xff1b; 开…

2024年第二届《英语世界》杯全国大学生英语听力大赛

下周开考&#xff01; 一、主办单位 商务印书馆《英语世界》杂志社 二、时间安排 赛事报名时间&#xff1a;即日起-2024年11月15日 正式比赛阶段&#xff1a;第一场&#xff1a;2024年9月22日10:00-22:00 第二场&#xff1a;2024年10月27日10:00-22:00 第三场&#xff1…

安装2024最新版Android Studio 最详细教程(带图展示)

一、安装JDK &#xff08;1&#xff09;首先在除C盘以外的盘建立文件夹&#xff0c;分别保存软件位置&#xff0c;JDK位置与SDK位置&#xff0c; 特别注意&#xff1a;所有文件名中不要出现空格&#xff0c;而且每个文件夹都是为空的状态 这里我是在D盘中操作。 &#xff0…

综合型医院适合什么样的数据摆渡方式,才能服务与安全兼顾?

综合型医院&#xff0c;是提供全面医疗服务的综合型医院。综合型医院的服务对象广泛&#xff0c;包括儿童、成人、老年人等各年龄段的人群&#xff0c;以及患有各种疾病的患者。它们通过提供全面的医疗服务&#xff0c;保障人民群众的健康需求&#xff0c;是医疗卫生事业的重要…

IP-adapter masking

https://github.com/huggingface/diffusers/issues/6802https://github.com/huggingface/diffusers/issues/6802

Java后端编程语言进阶篇

第一章 函数式接口 函数式接口是Java 8中引入的一个新特性&#xff0c;只包含一个抽象方法的接口。 函数式接口可以使用Lambda表达式来实现&#xff0c;从而实现函数式编程的特性。 使用 FunctionalInterface标识接口是函数式接口&#xff0c;编译器才会检查接口是否符合函数…

linux-L3-linux 复制文件

linux 中要将文件file1.txt复制到目录dir中&#xff0c;可以使用以下命令 cp file1.txt dir/复制文件 cp /path/to/source/file /path/to/destination移动 mv /path/to/source/file /path/to/destination复制文件夹内的文件 cp -a /path/to/source/file /path/to/destinati…

孟德尔随机化分析和GWAS分析有什么区别?

大家好&#xff0c;我是邓飞。 最近一直在研究孟德尔随机化分析&#xff0c;已经从概念到实操了&#xff0c;程序已经跑通了&#xff0c;很开心。这几天写的博客&#xff1a; 孟德尔随机化的术语理解 从一篇孟德尔随机化文章看MR常见结果形式 对于GWAS分析&#xff0c;从原…

LRELHLNNN;亲水性抗肝纤维化多肽作为基础肽;I型胶原蛋白靶向肽;九肽LRELHLNNN

【LRELHLNNN 简介】 LRELHLNNN是一种多肽&#xff0c;它能够选择性地结合到I型胶原蛋白&#xff0c;具有亲和力为170 nM。LRELHLNNN是由9个氨基酸组成&#xff0c;其氨基酸序列为H-Leu-Arg-Glu-Leu-His-Leu-Asn-Asn-Asn-OH。LRELHLNNN因其与I型胶原蛋白的高亲和力而在生物医学领…

密码学---黄道十二宫

✨简单理解的概念&#xff1a;是一种换位密码。 &#x1f380;破解需要用到对角线的方式&#xff1a;第一个H&#xff0c;先向下移动1位&#xff0c;再向右移动2位&#xff0c;依次类推。 &#x1f380;接着对对角线重新排列&#xff0c;就能得到一段有序的代码 &#x1f380; …

玩机搞机-----如何简单的使用ADB指令来卸载和冻结系统应用 无需root权限 详细操作图示教程

同类博文&#xff1a; 玩机搞机---卸载内置软件 无root权限卸载不需要的软件 安全卸载_无需root卸载彻底内置软件-CSDN博客 在很多时候我们需要卸载一些系统级的app。但如果直接手机端进行卸载的话。是无法正常卸载的。其实我们可以通过有些成品工具或者完全靠ADB指令来进行卸…

网红酒店|基于java的网红酒店预定系统(源码+数据库+文档)

酒店预定|网红酒店|网红酒店预定系统 目录 基于java的网红酒店预定系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&am…