牛客競賽 小A的位運算(思維)

2021-09-18 03:07:28 字數 1333 閱讀 1360

題目描述

位運算是乙個非常重要的東西。而小a最近在學習位運算,小a看到了一道很簡單的例題,是說從n個數裡面選出n-1個數要讓它們或起來的值最大,小a想知道這個答案是多少。你可以幫幫他嗎?

輸入描述:

第一行乙個整數n表示有n個數接下來一行n個數表示a1,a2…an

輸出描述:

一行輸出個結果代表最大值

輸入

5

1 2 4 8 16

輸出

說明

選擇2,4,8,16或的和是最大的,沒有比這個更大的方案。

備註: 1 ≤ n ≤ 5e6,1 ≤ a[i] ≤ longlong

雖說是位運算,但是這題和二進位制沒啥關係…

要去除n個數中的乙個,使剩下的n-1個數最大,或運算的話要除去的數並沒有什麼特徵,於是要列舉被除去的數。

o(n2)的列舉肯定是不行的,這裡就要用到技巧了,先預處理前 i 個數的或和後 i 個數的或和,分別放入l[i]r[i]中,然後列舉被除去的數,則有

除 去i

後的或和

=l[i

−1]∣

r[i+

1]

除去 i 後的或和 = l[i-1] | r[i+1]

除去i後的或

和=l[

i−1]

∣r[i

+1]該方法可適用於定義一種運算,然後求去除其中乙個數然後運算後的最大/最小值。

#include

#define ll long long

using

namespace std;

const

int inf=

0x3f3f3f3f

;const

int maxn=

5e6+10;

ll a[maxn]

,l[maxn]

,r[maxn]

;//外部定義,陣列全部置零

intmain()

牛客競賽(字串 思維)

題目描述 給出乙個僅包含小寫字母的字串s,你最多可以操作k次,使得任意乙個小寫字母變為與其相鄰的小寫字母 ascii碼差值的絕對值為1 請你求出可能的最長相等子串行 即求這個字串修改至多k次後的的乙個最長子序列,且需要保證這個子串行中每個字母相等 子串行 從原字串中取任意多個字母按照先後順序構成的新...

牛客小白月賽13 D 小A的位運算

題目描述 位運算是乙個非常重要的東西。而小a最近在學習位運算,小a看到了一道很簡單的例題,是說從n個數裡面選出n 1個數要讓它們或起來的值最大,小a想知道這個答案是多少。你可以幫幫他嗎?輸入描述 第一行乙個整數n表示有n個數接下來一行n個數表示a1,a2 an 輸出描述 一行輸出個結果代表最大值 示...

奇怪的排序問題(牛客競賽)

時間限制 c c 5秒,其他語言10秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 操場上有n個人排成一隊,這n個人身高互不相同,可將他們的身高視為乙個1到n的排列。這時需要把隊伍變成公升序,也就是從矮到高排序。每次可以選擇乙個人,讓這...