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。...