rt,蒟蒻觉得大概率是思路错了,各位dalao指教一下哪里错了awa。
大致思路:如果一共能凑成的小组数不足则输出 -1。
否则先选出 k - 1 个小组,再看剩下的人里面人数分布情况,大于2的加上2,否则直接加上去(因为要 k 个小组那么最多可以搞 k - 1 个小组,再把剩下的不能凑成一个小组的人数加上去)
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 10;
int t;
signed main ()
{
cin >> t;
while (t --)
{
int n, k, a[N]; cin >> n >> k;
int cnt = 0, sum = 0;
for (int i = 1; i <= n; i ++)
{
int ti; cin >> ti;
cin >> a[i];
cnt += a[i] / 3;
}
if (cnt < k)
{
cout << -1 << '\n';
continue;
}
sort (a + 1, a + 1 + n);
int i; cnt = 0;
for (i = n; i > 0; i --)
{
cnt += a[i] / 3;
if (cnt >= k)
{
cnt -= a[i] / 3;
sum += (k - 1 - cnt) * 3 + (a[i] / 3 - (k - 1 - cnt)) * 2;
break;
}
sum += a[i];
}
for (i = i - 1; i > 0; i --) sum += (a[i] > 2 ? 2 : a[i]);
cout << sum << '\n';
}
return 0;
}