51nod 1312 最大異或和

2022-05-08 03:57:09 字數 1028 閱讀 4002

很顯然我們求出一組線性基來,如果有m個基,那麼可以構造n - m + 1個最大異或值

而對於線性基中的元素,除了最大的元素,我們用最大異或值異或掉每個元素累加進答案

而不是把線性基中的元素處理成乙個下三角矩陣!

#include #include #include #include #include #include #define enter putchar('\n')

#define space putchar(' ')

#define maxn 1000005

//#define ivorysi

#define pb push_back

#define mo 1000007

#define pii pair#define mp make_pair

using namespace std;

typedef long long int64;

templatevoid read(t &res)

while(c >= '0' && c <= '9')

res = res * f;

}templatevoid out(t x)

if(x >= 10) out(x / 10);

putchar('0' + x % 10);

}int n;

int64 a[60],b[60];

bool vis[60],has[60];

void solve()

}} }

int64 ans = 0;

for(int i = 1 ; i <= n ; ++i)

ans += a[i];

} }

int64 t = 0;

for(int i = 55 ; i >= 0 ; --i)

}ans += t;

for(int i = 55 ; i >= 0 ; --i)

out(ans);enter;

}int main()

51nod1312 最大異或和

基準時間限制 1 秒 空間限制 131072 kb 分值 320 有乙個正整數陣列s,s中有n個元素,這些元素分別是s 0 s 1 s 2 s n 1 現在你可以通過乙個操作來更新陣列。操作方法如下 選擇兩個不同的數i j 0 i,j 你可以進行任意多次操作,問最後生成的陣列s的元素和 sum s ...

51nod1312 最大異或和(線性基)

傳送門 先把線性基建出來 顯然其他所有數都可以湊成線性基的最大值 考慮怎麼讓線性基內和最大 手玩一下可以發現最優情況是最高位的都有,剩下每乙個基都少填乙個 include using namespace std const int rlen 1 20 1 inline chargc define i...

最大異或和

問題描述 給出n個整數,多組詢問求乙個給出的數與這n個數中的乙個數的最大異或的值。輸入格式 第一行乙個整數n,表示有個數字。第二行n個正整數。第三行乙個整數m,表示m個詢問。第四行m個整數,表示m個詢問的整數。輸出格式 共m行,對於每個詢問輸出最大的異或值。輸入樣例 43 5 6 7 31 4 7 ...