mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
Create 1893_wyg1997.cpp
This commit is contained in:
parent
a99eae15e9
commit
b707a848b0
50
zzuliOJ/1893_wyg1997.cpp
Normal file
50
zzuliOJ/1893_wyg1997.cpp
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
#include <algorithm>
|
||||||
|
using namespace std;
|
||||||
|
#define CLR(a,b) memset(a,b,sizeof(a))
|
||||||
|
#define INF 0x3f3f3f3f
|
||||||
|
long long num[1000000];
|
||||||
|
long long ans;
|
||||||
|
bool cmp(int a,int b)
|
||||||
|
{
|
||||||
|
return a > b;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
long long n;
|
||||||
|
int u;
|
||||||
|
scanf ("%d",&u);
|
||||||
|
while (u--)
|
||||||
|
{
|
||||||
|
scanf ("%lld",&n);
|
||||||
|
ans = 0;
|
||||||
|
for (int i = 1 ; i <= n ; i++)
|
||||||
|
{
|
||||||
|
scanf ("%d",&num[i]);
|
||||||
|
ans += num[i];
|
||||||
|
}
|
||||||
|
ans *= (n-1);
|
||||||
|
sort(num+1,num+1+n,cmp);
|
||||||
|
long long mul = 1;
|
||||||
|
long long ant; //二进制末尾为1的个数
|
||||||
|
while (num[1])
|
||||||
|
{
|
||||||
|
ant = 0;
|
||||||
|
for (int i = 1 ; i <= n ; i++)
|
||||||
|
{
|
||||||
|
if (num[i] == 0)
|
||||||
|
break;
|
||||||
|
if (num[i] & 1)
|
||||||
|
ant++;
|
||||||
|
num[i] >>= 1;
|
||||||
|
}
|
||||||
|
ans += (((ant-1) * ant) >> 1) * mul; //与运算
|
||||||
|
ans += ((n-ant) * ant + (((ant-1) * ant) >> 1)) * mul; //或运算
|
||||||
|
ans += ((n-ant) * ant) * mul; //异或运算
|
||||||
|
mul <<= 1;
|
||||||
|
}
|
||||||
|
printf ("%lld\n",ans);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user