time limit: 2 sec
memory limit: 128 mb
submit: 165
solved: 40
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。
211021 1
04
x^y+x&y==x|y考慮二進位制的每一位對結果的影響
比如1101、1001、1010進行上述運算
則可發現
從右到左每一位上有1的個數記為
cnt[0]~cnt[3]分別為
2、1、1、3
因為或運算除了0|0==0
其餘都為1
也就是0|1+1|1
所以對於最右邊運算後有效的1個數
為 cnt[0]*(n-cnt[0])+(cnt[0]*(cnt[0]-1))/2
而這些1所代表的個數要轉變為十進位制
則要乘上其對應的1<<0
所以核心**為
[cpp]view plain
copy
?for
(int
i=0; i
res+=(1
其中lx代表最大數的二進位制位數
至於求a[i]+a[j]
只需要把a[1~n]相加求和之後乘(n-1)
也就是每個數用了n-1次
#include#include#includeusing namespace std;
long long a[100200];
int main() {
int t;
scanf("%d",&t);
while(t--) {
int n;
scanf("%d",&n);
for(int i=0; i>lx!=0; lx++)
for(int i=0; i>lx&1][lx]++;
long long res=0;
for(int i=0; i
985系列 985的方格難題
time limit 1 sec memory limit 128 mb submit 450 solved 99 submit status web board 985走入了乙個n n的方格地圖,他已經知道其中有乙個格仔是壞的。現在他要從 1,1 走到 n,n 每次只可以向下或者向右走一步,問他能...
985的買飲料難題
time limit 1 sec memory limit 128 mb submit 221 solved 118 submit status web board 天氣太熱了,985制定了對未來的規劃即第i天喝a i 瓶飲料。為了節約開支,他打聽到了第i天每瓶飲料的 p i 為了不讓自己的規劃落空...
985的買飲料難題
time limit 1 sec memory limit 128 mb submit 233 solved 123 submit status web board 天氣太熱了,985制定了對未來的規劃即第i天喝a i 瓶飲料。為了節約開支,他打聽到了第i天每瓶飲料的 p i 為了不讓自己的規劃落空...