A. Tricky Sum

CF 的第一场教育场次是2015年11月13日,准备从第一场教育场开始写A,B,C题
在page13,现在教育场更新到了160

先从A开始刷

#include<bits/stdc++.h>
using namespace std;

bool check(long long a)
{
   
	if(a%2!=0)	return false;
	
	while(a%2==0)
	{
   
		a/=2;
	}
	if(a==1)	return true;
}

int main()
{
   
	int t;
	cin>>t;
	
	while(t--)
	{
   
		long long n;
		cin>>n;
		
		long long sum=0;
		for(long long i=1;i<=n;i++)
		{
   
			long long temp=i;
			if(check(temp))	temp=-temp;
			sum+=temp;
		}
		
		cout<<sum<<endl;
	}
	
	return 0;
}


上面的代码过不了样例,看了下题解,发现李牧意思没有理解错,只是应该是超时了,算了很久才算出答案,而且答案还不对,我用的是最暴力的做法

等差数列求和除以2 ,要是难以整除的话,要怎么考虑

解决了,long long 不会向下取整

#include<bits/stdc++.h>
using namespace std;

int main()
{
   
	int t;
	cin>>t;
	
	while(t--)
	{
   
		long long n;
		cin>>n;
		
		long long sum=(1+n)*n/2;
		long long pow=1;
		while(pow<=n)
		{
   
			sum-=pow*2;
			pow*=2;
		}
		cout<<sum<<endl;
	}
	
	return 0;
}

首先是等差数列求和,然后是减去所有2的次方,等差数列求和之后要减去两次2的次方,第一次是减去原来的数,第二次是把2的次方变成负数,实现题目的要求,使用long long ,其他的没啥需要注意的了

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-16 20:32:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-16 20:32:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-16 20:32:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-16 20:32:02       20 阅读

热门阅读

  1. etcd数据备份数据恢复数据压缩碎片整理

    2024-01-16 20:32:02       26 阅读
  2. CF1920 D. Array Repetition [细节规律题]

    2024-01-16 20:32:02       29 阅读
  3. 字符串和整型转换的那些事儿

    2024-01-16 20:32:02       31 阅读
  4. 边缘计算的挑战和机遇

    2024-01-16 20:32:02       29 阅读
  5. 我的创作纪念日

    2024-01-16 20:32:02       29 阅读