求hack掉人类智慧
查看原帖
求hack掉人类智慧
552255
aleph_楼主2025/2/4 16:34

凭直觉模数应该比较大,所以枚举前 500500 大的模数。同时 aia_iaja_j 应该离它不远,于是 O(n3)O(n^3) 枚举应运而生。剪枝:如果当前答案已经 ak\ge a_k,那么就没必要往下枚举了。跑的飞快,仅161ms,比许多正解都快。

Submission Record

#include <bits/stdc++.h>
using namespace std;
const int N=200005;
int n,ans=0,a[N];
bool cmp(int x,int y){
	return x>y;
}
int read(){
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=(x<<3)+(x<<1)+c-'0';
		c=getchar();
	} 
	return x*f;
}
int main(){
	n=read();
	for(int i=1;i<=n;i++){
		a[i]=read();
	}
	sort(a+1,a+n+1,cmp);
	for(int k=1;k<=min(n,500);k++){
		if(ans>=a[k]) break;
		for(int i=max(1,k-250);i<=max(n,k+250);i++){
			if(i==k) continue;
			for(int j=i+1;j<=min(n,k+250);j++){
				if(j==k) continue;
				ans=max(ans,(a[i]+a[j])%a[k]);
			}
		}
	}
	cout<<ans<<endl;
}
2025/2/4 16:34
加载中...