对于非负整数 u, v 的异或 ,w 二进制下第 i 位为 1,当且仅当 u 和 v 二进制下的第 i 位不相同。
非负整数 x 的 ,定义为 x 二进制下 1 的个数,比如 , , 。
现给一个长度为 n 的数组 a1, a2, …, an。定义数组连续的一段 al, al + 1, …, ar 的分数为该段内所有数异或的 ,即:
需要请你给出如下信息:
1.请给出数组 ai 的一个分段方案,使得各段分数的总和最大;
2.请给出数组 ai 的一个分段方案,使得各段分数的总和最小。
思路:总和最大肯定就是分成n个段;总和最小时我们发现,一直往后异或,整个数组所有数的1的总和一定是在减小或者不变,所有直接让n个数为一段。这些样例给的太迷惑人了
#include<bits/stdc++.h>
using namespace std;
#define bug cout << "----\n"
#define inf 0x3f3f3f3f
typedef long long ll;
const int N = 1000010;
const int M = 5000;
int main() {
int n,m,i,j;
cin >> n;
for(i=0;i<n;i++)
cin >> j;
for(i=0;i<n;i++)
cout << i+1 << " \n"[i==n-1];
for(i=0;i<n;i++)
cout << '1' << " \n"[i==n-1];
return 0;
}