牛客OI周赛9-普及组-B题-小L的序列

小L的序列

链接:https://ac.nowcoder.com/acm/contest/696/B
来源:牛客网
 

题目描述

    如果一个数x满足的|x|二进制中1的个数>0的个数我们认为他是一个好的数。

    一个好的数的价值是1,而一个不好的数的价值是-1

    比如|2|=|−2|=2(10)=10(2),|10|=|−10|=10(10)=1010(2)|2|=|−2|=2(10)=10(2),|10|=|−10|=10(10)=1010(2)

    小L想知道一个序列AnAn的价值是多少

输入描述:

 

第一行有一个整数n,表示序列AnAn的长度

第二行有n个整数,第i个整数AiAi表示序列中第i个数是多少

输出描述:

输出仅一行,表示这个序列的价值是多少

示例1

输入

复制

2
2 1

输出

复制

0

说明

1(1),2(-1)

示例2

输入

复制

6
1 2 3 4 5 6

输出

复制

2

说明

1(1),2(-1),3(1),4(-1),5(1),6(1)

备注:

对于50%50%的数据: n=1,−105≤Ai≤105n=1,−105≤Ai≤105 
对于100%100%的数据: 1≤n≤105,−231−1≤Ai≤231−11≤n≤105,−231−1≤Ai≤231−1

题解:

题目的意思是判断数的绝对值的二进制数中1与0个数,如果1的个数大于0的个数,则这个数的价值就是1,否则为-1,最后计算整个序列中的总价值;(博主表达能力有限,看不懂的话请看代码)(注意数据取值范围)

源代码:

#include 

const int N=100001;
int two(long long x)
{
	int t1=0,t2=0,i,t=0;//t1记录1的个数,t2记录0的个数 
	char tt[10000];//用来存放x的二进制数 
	
	while(x>0)//将x化为2进制数储存在tt中 
	{
		tt[t]=x%2+'0';
		x/=2;
		t++;
	}
	tt[t]='\0';
	for(i=0;it2) return 1;
	return -1;
}
int main()
{
	long long a[N];
	int n,sum=0,i;//sum记录总价值 
	
	scanf("%d",&n);
	for(i=0;i0)
			sum+=two(a[i]);
		else
			sum+=two(-a[i]);
	printf("%d\n",sum);
	return 0;
}

 

你可能感兴趣的:(字符串)