站外题求助
  • 板块学术版
  • 楼主zyzfido
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/4/8 13:06
  • 上次更新2023/10/23 19:05:27
查看原帖
站外题求助
936276
zyzfido楼主2023/4/8 13:06

rt,蒟蒻前几周做练习,做到这道题qwq

问题 G: 求和

输入文件: sum.in 输出文件: sum.out

时间限制: 1 Sec 内存限制: 128 MB

题目描述

HH同学又开始研究数字问题,给出NN个整数,第ii个数为AiA_i,每对数字之间有一个和谐度。每对数字的和谐度定义为这两个数字的andand(与操作),oror(或操作),xorxor(异或操作)的和,而所有数的总和谐度是所有数对的和谐度的和。

现在给你NN个整数,你能帮助HH同学求出他们的总和谐度么?

输入

第11行,一个正整数NN,表示数的个数。

接下来NN行,每行有一个整数AiA_i,表示待求和谐度的第ii个数。

输出

输出为AiA_i行,一个整数,表示总和谐度。

样例输入输出

样例输入 #1

3

1

2

3

样例输出 #1

18

样例说明 #1

有三个数,分别为1,2,31,2,3

(1,2)(1,2) 的和谐度为:1and2+1or2+1xor2=61and2+1or2+1xor2=6 ;

(2,3)(2,3) 的和谐度为:2and3+2or3+2xor3=62and3+2or3+2xor3=6 ;

(1,3)(1,3) 的和谐度为:1and3+1or3+1xor3=61and3+1or3+1xor3=6 ;

总和谐度为:1818 。

数据范围

对于5050%的数据,1≤N≤100001≤N≤10000。

对于100100%的数据,1≤N≤1,000,000,0≤Ai≤300001≤N≤1,000,000, 0≤Ai≤30000 ,答案保证在263−12^{63}-1以内。

蒟蒻代码:

#include<bits/stdc++.h>
using namespace std;
long long n,a[10000005],ans,ans1,ans2,ans3,num;
int main(){
	freopen("sum.in","r",stdin);
	freopen("sum.out","w",stdout);
	cin>>n;
	for(long long i=1;i<=n;i++)
	  cin>>a[i];
	for(long long i=1;i<=n-1;i++){
	  for(long long j=i+1;j<=n;j++){
	  	ans1=a[i]&a[j];
	  	ans2=a[i]|a[j];
	  	ans3=a[i]^a[j];
	  	num=ans1+ans2+ans3;
	  	ans+=num;
	  }
	}
	cout<<ans;
	return 0; 
}

O(n2)O(n^2)做法,但是TLE了qwq

2023/4/8 13:06
加载中...