标签:int getch tom 重复 msu tin copy math font
这是一道模板题。
给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。
第一行一个数n,表示元素个数
接下来一行n个数
输出格式:仅一行,表示答案。
1≤n≤50,0≤Si≤250 1 \leq n \leq 50, 0 \leq S_i \leq 2 ^ {50} 1≤n≤50,0≤Si?≤250
CODE:
1 #include <bits/stdc++.h> 2 #define N 51 3 #define ll long long 4 using namespace std; 5 6 int n; 7 ll ans; 8 ll a[N], p[101]; 9 10 inline ll read() 11 { 12 char ch = getchar(); 13 ll x = 0, f = 1; 14 while(ch > ‘9‘ || ch < ‘0‘) 15 { 16 if(ch == ‘-‘) 17 f = -1; 18 ch = getchar(); 19 } 20 while(ch >= ‘0‘ && ch <= ‘9‘) 21 { 22 x = x * 10 + ch - ‘0‘; 23 ch = getchar(); 24 } 25 return x * f; 26 } 27 28 void Get_LB(ll x) 29 { 30 for(int i = 62; i >= 0; i--) 31 { 32 if(!(x >> (ll)i)) 33 continue; 34 if(!p[i]) 35 { 36 p[i] = x; 37 break; 38 } 39 x ^= p[i]; 40 } 41 } 42 43 int main() 44 { 45 n = read(); 46 for(int i = 1; i <= n; i++) 47 Get_LB(a[i] = read()); 48 /// for(int i=0;i<=62;i++)cout<<p[i]<<" ";cout<<endl; 49 for(int i = 62; i >= 0; i--) 50 if((ans ^ p[i]) > ans) 51 ans ^= p[i]; 52 cout << ans; 53 return 0; 54 55 }
标签:int getch tom 重复 msu tin copy math font
原文地址:https://www.cnblogs.com/zhangbuang/p/11107998.html