首页 > 试题广场 >

小红的项链

[编程题]小红的项链
  • 热度指数:345 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小红将n个珠子排成一排,然后将它们串起来,连接成了一串项链(连接后为一个环,即第一个和最后一个珠子也是相邻的),任意相邻两个珠子的距离为1。已知初始共有3个珠子是红色的,其余珠子是白色的。
小红拥有无穷的魔力,她可以对项链上的相邻两个珠子进行交换。小红希望用最小的交换次数,使得任意两个红色的珠子的最小距离不小于k,你能帮小红求出最小的交换次数吗?


输入描述:
第一行输入一个正整数t,代表询问次数。
每行为一次询问,输出五个正整数n,k,a_1,a_2,a_3,分别代表珠子总数量、要求的珠子距离,以及三个珠子的位置。
1\leq t \leq 10^4
1\leq n\leq 10^9
1\leq k,a_1,a_2,a_3\leq n
保证a_i互不相同。


输出描述:
输出t行,每行输入一个整数,代表最小的交换次数。如果无法完成目的,则输出-1。
示例1

输入

2
6 2 1 2 3
5 2 1 3 4

输出

2
-1

说明

第一组样例,六个珠子为红红红白白白。第一次操作交换第一个和第六个珠子,第二次操作交换第三个和第四个珠子
第二组询问,一共有5个珠子,其中有3个红珠子,因此无论如何都会有两个红珠子相邻,不可能满足任意两个珠子的最小距离不小于2。
头像 有胆量的柯基在学习
发表于 2025-08-20 18:57:16
#include <bits/stdc++.h> using namespace std; int main() { int T; cin >> T; while (T--) { long long n, k, a1, a2, a3; 展开全文