昨天这个 tle 让我想 O(n) 做法想了大概半小时。
然后发现 maxn 是 2e5,交上去就 A 了。然后掉大分。
WHY?????????????????
为什么会 tle ????????????????
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+10;
ll n,a[maxn],mx,rec[maxn],tot;
void solve() {
memset(rec,0,sizeof(rec));
mx=0;
tot=0;
cin>>n;
for(ll i=1;i<=n;i++) {
cin>>a[i];
if(a[i]%2==0) {
rec[++tot]=a[i];
} else {
mx=max(mx,a[i]);
}
}
if(tot==n) {
cout<<0<<endl;
return;
} else {
sort(rec+1,rec+tot+1);
ll p=1;
while(p<=tot && rec[p]<mx) {
mx+=rec[p];
p++;
}
if(p<=tot) {
cout<<tot+1<<endl;
} else {
cout<<tot<<endl;
}
}
}
int main() {
int testcases;
cin>>testcases;
while(testcases--) {
solve();
}
return 0;
}
(这个是错误代码,maxn 开大就行了)