合并果子加强版TLE on Subtask #4
查看原帖
合并果子加强版TLE on Subtask #4
766313
Towards_Dawn楼主2024/10/9 12:34
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[10000010],b[10000010],tta,ttb,zza,zzb;
long long ans;
int read(int x = 0) {
	char ch = getchar();
	while(ch < 48 || ch > 57) ch = getchar();
	while(ch >= 48 && ch <= 57) {
		x = x * 10 + (ch ^ 48);
		ch = getchar();
	}
	return x;
}
signed main(){
	n=read();
	memset(a,0x3f,sizeof(a));
	memset(b,0x3f,sizeof(b));
	for(int i=1;i<=n;i++){
		a[i]=read();
	}
	sort(a+1,a+1+n);
	tta=1;
	ttb=1;
	b[++zzb]=a[tta]+a[tta+1];
	tta=3;
	ans+=b[zzb];
	while(zzb<n-1){
		if(a[tta+1]+a[tta]<b[ttb]+a[tta]&&a[tta+1]+a[tta]<b[ttb+1]+b[ttb]){
			b[++zzb]=a[tta]+a[tta+1];
			tta+=2;
			ans+=b[zzb];
		}
		else if(b[ttb+1]+b[ttb]>b[ttb]+a[tta]){
			b[++zzb]=b[ttb]+a[tta];
			tta++;
			ttb++;
			ans+=b[zzb];
		}
		else{
			b[++zzb]=b[ttb+1]+b[ttb];
			ttb+=2;
			ans+=b[zzb];
		}
	}
	cout<<ans;
	return 0;
}

快读开了,复杂度 O(n)O(n),队列

2024/10/9 12:34
加载中...