社区讨论

题解一的优化(希望被看到)

B3930[GESP202312 五级] 烹饪问题参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mj9nz36d
此快照首次捕获于
2025/12/17 15:02
2 个月前
此快照最后确认于
2025/12/17 15:17
2 个月前
查看原帖

这串代码有优化的空间

CPP
for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(i!=j)
			{
				mx=max(mx,a[i]&a[j]);
			}
		}
	}
我们知道,3(0011) & 4(0100)等于4 & 3。
那么也就是说在第二个循环内,有一部分重复判断了
优化如下
CPP
#include <iostream>
#include <algorithm>
using namespace std ;
int Max, n, a[214748369] ;
bool cmp(int a,int b)
{
	return a>b;
}
int main()
{
	cin >> n ;
	for(int i = 1 ; i <= n ; i ++ ) cin >> a[i] ;
	
	sort(a + 1, a + n + 1, cmp) ;
	
	n = min(n, 32) ;
	
	for(int i = 1 ; i <= n ; i ++ )
	{
		for(int j = i + 1 ; j <= n ; j ++ )
		{
			Max = max(Max, a[i] & a[j]) ;
		}
	}
	cout << Max ;
}



虽说大佬的逻辑已经很无敌了O(32232^2
但④
这说明题太水(doge)

回复

2 条回复,欢迎继续交流。

正在加载回复...