列表

详情


NC23483. 小A的位运算

描述

位运算是一个非常重要的东西。而小A最近在学习位运算,小A看到了一道很简单的例题,是说从N个数里面选出N-1个数要让它们或起来的值最大,小A想知道这个答案是多少。你可以帮帮他吗?

输入描述


输出描述

示例1

输入:

5
1 2 4 8 16

输出:

30

说明:

选择2,4,8,16或的和是最大的,没有比这个更大的方案。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 64ms, 内存消耗: 2016K, 提交时间: 2019-04-13 01:42:15

#include<bits/stdc++.h>
using namespace std;long long a[5000005],x[5000005],t,n,i=1,ans;int main(){cin>>n;for(;i<=n;)cin>>x[i],a[i]=a[i-1]|x[i++];for(i=n;i;)ans=max(ans,a[i-1]|t),t|=x[i--];cout<<ans;}

C++11(clang++ 3.9) 解法, 执行用时: 37ms, 内存消耗: 872K, 提交时间: 2019-04-12 19:17:39

#include<stdio.h>

int a[5000100];

int main()
{
	int n;int ans=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		ans|=a[i];
	}
	printf("%d\n",ans);
	return 0;
}

上一题