蒟蒻求助
查看原帖
蒟蒻求助
234224
青鸟_Blue_Bird楼主2021/11/15 19:28

感觉思路没错啊,为什么第三个样例过不了。求助大佬

#include <bits/stdc++.h>
using namespace std;
#define N 1000010

template <class T>
inline void read(T& a){
	T x = 0, s = 1;
	char c = getchar();
	while(!isdigit(c)){
		if(c == '-') s = -1;
		c = getchar(); 
	}
	while(isdigit(c)){
		x = x * 10 + (c ^ '0');
		c = getchar(); 
	}
	a = x * s;
	return ; 
}

int T; 

int a[N];
double b[N]; 
double avg[N]; 
int k[N]; 
int sum[N];
int ans[N];  
int n, q; 

inline void clean(){
	memset(a, 0, sizeof(a));
	memset(b, 0, sizeof(b)); 
	memset(sum, 0, sizeof(sum)); 
	memset(k, 0, sizeof(k)); 
	memset(avg, 0, sizeof(avg)); 
	memset(ans, 0, sizeof(ans)); 
	return ; 
}
 

int main(){
//	freopen("hh.txt", "r", stdin); 
	read(T);
	while(T--){
		clean();
		read(n), read(q); 
		for(int i = 1; i <= n; i++)
			read(a[i]);
		for(int i = 1; i <= q; i++)
			read(k[i]);
		sort(a + 1, a + n + 1); 
		for(int i = 1; i <= n; i++)
			b[i] = (double)a[i]; 
		for(int i = 1; i <= n; i++)
			sum[i] = sum[i - 1] + a[i]; 
		for(int i = 1; i <= n; i++)
			avg[i] = (double)(sum[n] - sum[i - 1]) / (double)(n - i + 1); 
		for(int i = 1; i <= q; i++){
			int pos = 1; 
			bool flag = 0; 
			for(int j = n; j; j = pos - 1){
				pos = lower_bound(b + 1, b + j + 1, avg[j] - k[i]) - b; 
				if(pos >= j) { ans[i] = n - pos + 1; flag = 1; break;} 
			}
			if(!flag) ans[i] = n; 
		}
		for(int i = 1; i <= q; i++)
			printf("%d ", ans[i]);
		printf("\n"); 
	}
	return 0;
}


2021/11/15 19:28
加载中...