rt,蒟蒻前几周做练习,做到这道题qwq
问题 G: 求和
输入文件: sum.in 输出文件: sum.out
时间限制: 1 Sec 内存限制: 128 MB
题目描述
H同学又开始研究数字问题,给出N个整数,第i个数为Ai,每对数字之间有一个和谐度。每对数字的和谐度定义为这两个数字的and(与操作),or(或操作),xor(异或操作)的和,而所有数的总和谐度是所有数对的和谐度的和。
现在给你N个整数,你能帮助H同学求出他们的总和谐度么?
输入
第1行,一个正整数N,表示数的个数。
接下来N行,每行有一个整数Ai,表示待求和谐度的第i个数。
输出
输出为Ai行,一个整数,表示总和谐度。
样例输入输出
样例输入 #1
3
1
2
3
样例输出 #1
18
样例说明 #1
有三个数,分别为1,2,3
(1,2) 的和谐度为:1and2+1or2+1xor2=6 ;
(2,3) 的和谐度为:2and3+2or3+2xor3=6 ;
(1,3) 的和谐度为:1and3+1or3+1xor3=6 ;
总和谐度为:18 。
数据范围
对于50的数据,1≤N≤10000。
对于100的数据,1≤N≤1,000,000,0≤Ai≤30000 ,答案保证在263−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)做法,但是TLE了qwq