庭师的利刃
Posted rhythm-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了庭师的利刃相关的知识,希望对你有一定的参考价值。
问题 B: 庭师的利刃
时间限制: 1 Sec 内存限制: 128 MB提交: 369 解决: 91
[提交] [状态] [讨论版] [命题人:]
题目描述
作为白玉楼的庭师,妖梦虽然不会n刀流,但是却领悟了生命二刀流。然而我也是个剑的收藏者,家里屯着n把剑,每一把剑都有一个灵魂值a[i],由于一些剑之间可能有共鸣,所以我需要两把契合度最高的剑。据妖梦所说,两把编号为i,j剑的契合度为a[i] and a[j]。如何深得剑的灵魂呢?(即求最大值)
输入
第一行一个整数n,代表藏剑数。
第二行n个整数,第i个整数表示a[i]。
第二行n个整数,第i个整数表示a[i]。
输出
输出包含一个正整数,最好的两把剑的契合度。
样例输入
5
12 5 6 3 1
样例输出
4
提示
对于40%的数据 n ≤ 1,000
对于100%的数据 n ≤ 1,000,000,0 ≤ a[i] < 2^31
#include <iostream> #include <string> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <vector> #include <queue> #include <deque> #include <map> #define range(i,a,b) for(int i=a;i<=b;++i) #define LL long long #define rerange(i,a,b) for(int i=a;i>=b;--i) #define fill(arr,tmp) memset(arr,tmp,sizeof(arr)) using namespace std; LL aa[1000005],ans; int n; void init(){ cin>>n; range(i,1,n)cin>>aa[i]; } void solve(){ rerange(i,31,1) { int tmp = 0; range(j, 1, n)if (((ans & aa[j]) == ans) && (aa[j] & (1 << (i - 1))))++tmp; if (tmp >= 2)ans += (1 << (i - 1)); } cout<<ans<<endl; } int main() { init(); solve(); return 0; }
以上是关于庭师的利刃的主要内容,如果未能解决你的问题,请参考以下文章