构造、贪心
不会 *1100 贪心,大败而归。
给定长度为 $n$ 的序列 $a$,其中 $a_i = i$ 且 $n$ 为奇数。
将序列 $a$ 分割为奇数个包含奇数个元素的连续子序列,使得这些子序列中位数的中位数为给定的数 $k$ 或者判断无解。
假设 $n=15$,手动构造几个例子。
- $k = 2$,$[1],[2],[3,15]$
- $k = 3$,$[1],[2],[3],[4],[5,15]$
- $k = 4$,$[1,3],[4],[5,15]$
- $k = 5$,$[1,3],[4],[5],[6],[7,15]$
发现 $k$ 为偶数时只需要把序列分成 $3$ 段;若 $k=1$ 或 $k=n$ 则无解,否则只需要把序列分成 $5$ 段。
时间复杂度 $O(1)$。
#include<bits/stdc++.h>
using namespace std;
int n,k;
void solution(){
scanf("%d%d",&n,&k);
if(n==1) puts("1\n1");
else if(k==1||k==n) puts("-1");
else if(k&1) printf("5\n1 2 %d %d %d\n",k,k+1,n);
else printf("3\n1 %d %d\n",k,k+1);
}
int T;
int main(){
scanf("%d",&T);
while(T--) solution();
return 0;
}