zzuli 1893 985的數學難題

2021-07-16 23:24:28 字數 1304 閱讀 9837

time limit: 2 sec  

memory limit: 128 mb

submit: 178  

solved: 44

submit

status

web board

985有n個正整數,他想快速知道下面函式的返回值

int a[n+1];

long long solve() }

return ans; }

注:^表示異或運算。

第一行輸入乙個整數t,代表有t組測試資料。

每組資料第一行輸入乙個整數代表元素個數,接下來一行輸入n個正整數a。

注:1 <= t <= 30,1 <= n,a <= 100000。

乙個整數代表最後的返回值ans。2

1 10

2 1 10 4

思路:考慮每個二進位制位,統計每一位的貢獻

把每個數的二進位制形式分析一下,找出所有有效的1.

((ans[0][i]

) * ans[1][i]) >> 1) * li;      //與運算 

((ans[0][i]) * ans[1][i] + (((ans[1][i]-1) * ant[1][i]) >> 1)) * li;        //或運算   

((ans[1][i]-1) * ant[1][i]) >> 1) * li;       //異或運算  

另外 有 a | b = a & b + a ^ b。

#include#include#includeusing namespace std;

const int maxn = 1000000;

int num[maxn];

long long ans;

bool cmp(int a,int b)

int main()

ans *= (n-1);

sort(num+1,num+n+1,cmp);

long long mul = 1;

long long val;

while(num[1])

ans += (((val - 1) * val) >> 1) * mul; // 與運算

ans += ((n - val) * val + (((val - 1) * val) >> 1)) * mul;//或運算

ans += ((n - val) *val) * mul;//異或運算

mul <<= 1;

}printf("%lld\n",ans);

}return 0;

}

1893 985的數學難題

time limit 2 sec memory limit 128 mb submit 174 solved 43 submit status web board 985有n個正整數,他想快速知道下面函式的返回值 int a n 1 long long solve return ans 注 表示異或...

鄭輕 1893 985的數學難題

time limit 2 sec memory limit 128 mb 985有n個正整數,他想快速知道下面函式的返回值 int a n 1 long long solve return ans 注 表示異或運算。第一行輸入乙個整數t,代表有t組測試資料。每組資料第一行輸入乙個整數代表元素個數,接...

zzuli 1198 985的數字難題

985的數字難題 985有n個數,已知每次操作可以將其中不相同的兩個數乙個加 一 乙個減一,操作次數不限。問他最多可以得到多少個相同的數。第一行輸入乙個整數t,代表有t組測試資料。每組資料佔兩行,第一行輸入乙個n代表元素個數,下面一行輸入n個整數a。注 1 t 30,1 n 1e4,1 a 1e3。...