悬两关——站外题TLE求条!
  • 板块学术版
  • 楼主Hanrui1206
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/6/15 21:07
  • 上次更新2024/6/15 23:38:22
查看原帖
悬两关——站外题TLE求条!
1283944
Hanrui1206楼主2024/6/15 21:07

题目描述
给定一个长度为 nn 的数列 aa,和一个整数 kk。每次操作,你可以在两种操作中选一种:

  • 选择某个数 aia_i,将它减一。即令 ai=ai−1a_i=a_i-1。
  • 选择某两个数 aia_i 和 aja_j,将一个变为另一个。即令 ai=aja_i=a_j。 求最少多少次操作可以让数列的和小于等于 kk。

输入格式
第一行一个整数 TT,表示数据组数。
每组数据第一行两个整数 nn 和 kk,第二行 nn 个整数 a1a1 到 anan。

输出格式
每组数据输出一行,代表答案。

样例输入

4
1 10
20
2 69
6 9
7 8
1 2 1 3 1 2 1
10 1
1 2 3 1 2 6 1 6 8 10

样例输出

10
0
2
7

数据规模
1≤T≤104,1≤n≤2×105,1≤k≤10151≤T≤10^4,1≤n≤2×10^5,1≤k≤10^{15}

全部 TLE!

#include <bits/stdc++.h>
using namespace std;
long long T, n, k, sum, a[200005], x;

int main() {
	cin>>T;
	for(int i=1; i<=T; i++) {
		cin>>n>>k;
		sum=0;
		x=0;
		for(int i=0; i<n; i++) {
			cin>>a[i];
			sum+=a[i];
		}
		sort(a, a+n);
		if(n==1) cout<<a[0]-k<<endl;
		while(sum>k) {
			if(a[n]!=a[i]) {
				a[n]=a[i];
			} else {
				a[n]--;
			}
			sort(a, a+n);
			x++;
		}
		cout<<x;
	}
	return 0;
}
2024/6/15 21:07
加载中...