Gym - 102889C

对于非负整数 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; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值