目录
题目描述
给定一个长为n的数组a和一个整数m,你需要将其切成连续的若干段,使得每一段的中位数都大于等于m,求最多可以划分成多少段。
我们定义,偶数个数的中位数为中间两个数中较小的那一个,奇数个数的中位数就是正中间的数。如[2,3,1,5]的中位数为2,[2,3,1,2]的中位数为2,[3,5,9,7,11]的中位数为7。
输入描述:
输入第一行是一个整数T(1≤T≤20),测试组数。
每个测试第一行是两个整数n,m(1≤n≤105,1≤m≤109),含义如题目所示。
第二行输入n个数,数组a,满足1≤ai≤109。
由于本题输入量较大,建议使用scanf等高效输入方式。
输出描述:
每个测试用例,输出一个整数,表示最多可以划分成多少段,若无论如何划分都不能满足条件,输出−1。
示例1
输入
4 5 4 10 3 2 3 2 5 3 5 2 3 3 2 2 5 4 5 5 2 10 3 2 3 2
输出
-1 1 -1 5
思路:
1,找规律,
2,中位数大于等于m的最大切分段数
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t;
cin>>t;
while(t--){
int n,m;
cin>>n>>m;
int ans=0;
for(int i=1;i<=n;++i)
{
int x;
cin>>x;
if(x>=m)ans++;
else ans--;
}
if(ans>0)cout<<ans<<'\n';
else cout<<-1<<'\n';
}
return 0;
}