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

Medians

 https://vjudge.net/problem/CodeForces-2032B/origin

题目

给定一个数组 a=[1,2,…,n]a=[1,2,…,n],其中 nn 是 奇数,以及一个整数 kk。

你的任务是选择一个 奇数 正整数 mm 并将 aa 分割成 mm 个子数组†† b1,b2,…,bmb1​,b2​,…,bm​,使得:

  • 数组 aa 的每个元素恰好属于一个子数组。
  • 对于所有 1≤i≤m1≤i≤m,∣bi∣∣bi​∣ 是 奇数,即每个子数组的长度为奇数。
  • median⁡([median⁡(b1),median⁡(b2),…,median⁡(bm)])=kmedian([median(b1​),median(b2​),…,median(bm​)])=k,即所有子数组的中位数数组的中位数‡‡ 必须等于 kk。median⁡(c)median(c) 表示数组 cc 的中位数。

†† 数组 aa 的长度为 nn 的子数组是某些整数 1≤l≤r≤n1≤l≤r≤n 的数组 [al,al+1,…,ar][al​,al+1​,…,ar​]。

‡‡ 奇数长度数组的中位数是数组按非递减顺序排序后中间的元素。例如: median⁡([1,2,5,4,3])=3median([1,2,5,4,3])=3, median⁡([3,2,1])=2median([3,2,1])=2, median⁡([2,1,2,1,2,2,2])=2median([2,1,2,1,2,2,2])=2。

输入

每个测试由多个测试用例组成。第一行包含一个整数 tt (1≤t≤50001≤t≤5000) — 测试用例的数量。测试用例的描述如下。

每个测试用例的第一行包含两个整数 nn 和 kk (1≤k≤n<2⋅1051≤k≤n<2⋅105, nn 是 奇数) — 数组 aa 的长度和所有子数组的中位数数组的期望中位数。

保证所有测试用例的 nn 之和不超过 2⋅1052⋅105。

输出

对于每个测试用例:

  • 如果没有合适的划分,输出 −1−1 在一行中。
  • 否则,在第一行输出一个 奇数 整数 mm (1≤m≤n1≤m≤n),在第二行输出 mm 个不同的整数 p1,p2,p3,…,pmp1​,p2​,p3​,…,pm​ (1=p1<p2<p3<…<pm≤n1=p1​<p2​<p3​<…<pm​≤n) — 表示每个子数组的左边界。

具体来说,对于有效答案 [p1,p2,…,pm][p1​,p2​,…,pm​]:

  • b1=[ap1,ap1+1,…,ap2−1]b1​=[ap1​​,ap1​+1​,…,ap2​−1​]
  • b2=[ap2,ap2+1,…,ap3−1]b2​=[ap2​​,ap2​+1​,…,ap3​−1​]
  • ……
  • bm=[apm,apm+1,…,an]bm​=[apm​​,apm​+1​,…,an​]。

如果有多个解,你可以输出其中任何一个。

示例

InputcopyOutputcopy
4
1 1
3 2
3 3
15 8
1
1
3
1 2 3
-1
5
1 4 7 10 13

注意

在第一个测试用例中,给定的划分有 m=1m=1 和 b1=[1]b1​=[1]。显然 median⁡([median⁡([1])])=median⁡([1])=1median([median([1])])=median([1])=1。

在第二个测试用例中,给定的划分有 m=3m=3 和:

  • b1=[1]b1​=[1]
  • b2=[2]b2​=[2]
  • b3=[3]b3​=[3]

因此,median⁡([median⁡([1]),median⁡([2]),median⁡([3])])=median⁡([1,2,3])=2median([median([1]),median([2]),median([3])])=median([1,2,3])=2。

在第三个测试用例中,没有有效的划分满足 k=3k=3。

在第四个测试用例中,给定的划分有 m=5m=5 和:

  • b1=[1,2,3]b1​=[1,2,3]
  • b2=[4,5,6]b2​=[4,5,6]
  • b3=[7,8,9]b3​=[7,8,9]
  • b4=[10,11,12]b4​=[10,11,12]
  • b5=[13,14,15]b5​=[13,14,15]

因此,median⁡([median⁡([1,2,3]),median⁡([4,5,6]),median⁡([7,8,9]),median⁡([10,11,12]),median⁡([13,14,15])])=median⁡([2,5,8,11,14])=8median([median([1,2,3]),median([4,5,6]),median([7,8,9]),median([10,11,12]),median([13,14,15])])=median([2,5,8,11,14])=8。

思路:

分三种情况:

1:k在端点,-1
2:k左右为偶数,5个区间

3:k左右为奇数,3个区间

(也可以又其他分法)

代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int t, n, k;
int main() {
	scanf("%d", &t);
	while (t--) {
		scanf("%d %d", &n, &k);
		if (k == 1 && k == n) {
			printf("1\n");
			printf("1\n");
		}
		else if (k == 1 || k == n) {
			printf("-1\n");
		}
		else if ((n - k) % 2 == 0) {
			printf("5\n");
			printf("%d %d %d %d %d\n", 1,k-1, k, k + 1,k+2);
		}
		else {
			printf("3\n");
			printf("%d %d %d\n", 1, k, k + 1);
		}
	}
	return 0;
}


http://www.kler.cn/a/551912.html

相关文章:

  • 前端(AJAX)学习笔记(CLASS 2):图书管理案例以及图片上传
  • Windows 环境下 Grafana 安装指南
  • 【够用就好002-2】发布github项目仓库补充
  • 现代卷积神经网络
  • [环境配置] 环境配置 - Java - Apache Maven 安装与配置
  • Redis+Lua脚本实现限流
  • Step-Video-T2V:阶跃星辰发布最强开源视频生成模型(论文详解)
  • 数字滤波器的设计实现及应用(论文+仿真)
  • spark任务运行
  • 算法竞赛备赛——【背包DP】二维费用背包、分组背包
  • DeepSeek教unity------事件管理
  • 【Linux系统】—— 调试器 gdb/cgdb的使用
  • 计算机考研之数据结构:深入解析最大公约数与欧几里得算法
  • 2.18学习记录
  • 力扣第4题 寻找两个正序数组的中位数
  • 智能体系统(AI Agent System)是什么?——从概念解析到企业数字化转型的全景落地及投资视角
  • DeepSeek 助力 Vue 开发:打造丝滑的瀑布流布局Masonry Layout
  • 力扣 hot 100 —— 15.三数之和
  • [数据分享第六弹]红树林数据集
  • OSPF协议五种网络类型中DR和BDR选举说明