upc 6358庭師的利刃

2021-08-21 19:39:03 字數 1182 閱讀 3753

時間限制: 1 sec  記憶體限制: 128 mb

提交: 729  解決: 145

[提交] [狀態] [討論版] [命題人:admin]

題目描述

作為白玉樓的庭師,妖夢雖然不會n刀流,但是卻領悟了生命二刀流。然而我也是個劍的收藏者,家裡屯著n把劍,每一把劍都有乙個靈魂值a[i],由於一些劍之間可能有共鳴,所以我需要兩把契合度最高的劍。據妖夢所說,兩把編號為i,j劍的契合度為a[i] and a[j]。如何深得劍的靈魂呢?(即求最大值)

輸入第一行乙個整數n,代表藏劍數。

第二行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

思路:高位1越多與運算的結果越大,首先對所有數從大到小排序,如果有兩個或更多數在第i位都為1,那麼答案一定是從這些數里得到的,每次用vector記錄這些數,因為已經排過序了,所以記錄的數肯定是高位為1的排在前面,然後對vector裡的數重複篩選,最後得出結果。

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define m(a,b) memset(a,b,sizeof(a))

#define pb push_back

typedef long long ll;

const int maxn = 100005+5;

const ll mod = 1000000007;

int a[(maxn<<2)+(maxn<<3)];

bool cmp(const int &a,const int &b)

int main()

sort(a+1,a+1+n,cmp);

vectorans,tmp;

for (int i=30;~i;--i) }}

if (ans.size()<2)

else

return 0;

}

UPC6358 庭師的利刃

時間限制 1 sec 記憶體限制 128 mb 提交 651 解決 117 提交 狀態 討論版 命題人 admin 題目描述 作為白玉樓的庭師,妖夢雖然不會n刀流,但是卻領悟了生命二刀流。然而我也是個劍的收藏者,家裡屯著n把劍,每一把劍都有乙個靈魂值a i 由於一些劍之間可能有共鳴,所以我需要兩把契...

UPC 6358 庭師的利刃

時間限制 1 sec 記憶體限制 128 mb 題目描述 作為白玉樓的庭師,妖夢雖然不會n刀流,但是卻領悟了生命二刀流。然而我也是個劍的收藏者,家裡屯著n把劍,每一把劍都有乙個靈魂值a i 由於一些劍之間可能有共鳴,所以我需要兩把契合度最高的劍。據妖夢所說,兩把編號為i,j劍的契合度為a i and...

庭師的利刃(暴力)

意思很明白,就是給你一堆數字給你。讓你求出 ai aj 的最大值。提供兩種方法,或者說是想法吧。首先先排一下序。第一種網上方法 ans只要加上某一位1匹配數 2 不斷更新o 31 n 第二種自己方法 不斷更新上限和下限不斷壓縮來找出答案。o n log n 差不多吧 includeusing nam...