4489: 有趣的&运算

题目描述

题目描述

&,中文读作“与”。与运算是位运算中非常重要的一种运算。规则和同学们熟知的if语句中的&&很像,一句话总结,有0则为0。

我们可以给出其四种运算规则:1&1=1,1&0=0,0&1=0,0&0=0。

如果我们想计算两个十进制数x和y进行与运算的结果,我们需要将两个十进制数先写为二进制数,然后上下对其进行按位计算。

举个例子,5&7的计算方法如下: 5=(101)25=(101)2​,7=(111)27=(111)2​

101111101101101111​

(101)2(101)2​=5<sub>10

所以5&7的结果就是5。

当然,编程中更加容易,你只需要写一行代码即可:

cout<<(5&7)<<endl;

现在TooY0ung给出 nn 个正整数,a1,a2...ana1​,a2​...an​

定义g(l,r)=a[l]g(l,r)=a[l]&a[l+1]a[l+1]&......&a[r]a[r],你可以将这n个数划分为任意段连续的子段[1,r1],[r1+1,r2]...[rm−1+1,n][1,r1​],[r1​+1,r2​]...[rm−1​+1,n]。

问g(1,r1)+g(r1+1,r2)+...+g(rm−1+1,n)g(1,r1​)+g(r1​+1,r2​)+...+g(rm−1​+1,n)的最小值。

输入格式

第一行一个整数 nn。 接下来一行 nn 个正整数。

输出格式

一行一个整数。

输入1:

3
1 2 3

输出1:

0

样例解释

分为[1,2],[3],结果为3。 分为[1],[2,3],结果为1。 分为[1,2,3],结果为0。

数据规模与约定

对于 100%100% 的数据,0<n≤2000000<n≤200000,1≤ai≤1091≤ai​≤109

  • 子任务1(30分):n=2n=2。
  • 子任务2(30分):n≤10n≤10
  • 子任务3(40分):没有特殊限制。
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int ans;
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		
		int a;
		cin>>a;
		if(i==1)  ans=a;
		ans=ans&a;
	}
	cout<<ans;
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值