关于数组开小然后 tle
查看原帖
关于数组开小然后 tle
374769
Epi4any楼主2024/8/5 09:00

昨天这个 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 开大就行了)

2024/8/5 09:00
加载中...