裸裸的贪心啊。。(我会告诉你们我智障地FST了一发吗
对于每组超过自己组的,我们要让它:
- 最大的尽量大
- 最小的尽量小(于是大的就可以留给别的组)
- 中间的尽量小(理由同上)
然后就是sort一下,暴力按这个流程分组,看下最后有几组比自己组大的。
#include <bits/stdc++.h>
using namespace std;
int n;
class TeamContest {
public:
int worstRank( vector <int> strength );
};
int TeamContest::worstRank(vector <int> a) {
n=a.size();
sort(a.begin()+3,a.end(),greater<int>());
sort(a.begin(),a.begin()+3);
int v=a[0]+a[2];
int w=n-1;
int ans=0;
//or(int i=0;i<a.size();i++) cout<<a[i]<<' ';cout<<endl;
for(int i=3;i<w-1;i++){
while(i<w-1&&a[i]+a[w]<=v) w--;
if (i>=w-1||a[i]+a[w]<=v) break;
w-=2;
ans++;
}
return ans+1;
}