b^ c >= b - c,这个结论应该记住,我还在这里证过……
这个题就用到了这个结论,假如当前答案集合为S,和为a,异或和为b,当前答案为a+b了。这时又读入个c,该不该加进来?a + c + b^c >= a + c + b - c == a + b,所以一定会使答案不变或更优,所以最终结果为所有的数字都是算进来。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int main() { 5 const int mod = 1e8 + 7; 6 int n, a; 7 long long x = 0, y = 0, ans; 8 cin >> n; 9 while (n--) { 10 cin >> a; 11 x += a, y ^= a; 12 x %= mod, y %= mod; 13 ans = (x + y) % mod; 14 } 15 cout << ans << endl; 16 return 0; 17 }