1893: 985的數學難題
time limit: 2 sec memory limit: 128 mb
submit: 112 solved: 18
submitstatusweb board
description
985有n個正整數,他想快速知道下面函式的返回值
int a[n+1];
long long solve()
} return ans;
} 注:^表示異或運算。
input
第一行輸入乙個整數t,代表有t組測試資料。
每組資料第一行輸入乙個整數代表元素個數,接下來一行輸入n個正整數a。
注:1 <= t <= 30,1 <= n,a <= 100000。
output
乙個整數代表最後的返回值ans。
sample input
2 1
10 2
1 1
sample output
0 4
二進位制的問題,經過學長講了之後才懂了一點
#include
#include
#define m 100010
#define n 18
#define ll long long
intmap[m][n], a[m], n;
int judge() //把所有的二進位制的一都存在陣列裡面
else
} }
} ll add(int i, int j)
else
} return ans;
} ll yihuo(int i, int j)
else
} return ans;
} ll yu(int i, int j)
} return ans;
} ll huo(int i, int j)
else
} return ans;
} int main()
judge();
ll ans = 0;
for(int i=1; iprintf("%lld\n", ans);
} return
0; }
下面還有乙個同學的**感覺也很好,加了一點自己的理解
鏈結在此
#include
#include
#include
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)
int main()
ans *= (n-1);
sort(num+1,num+1+n,cmp);
long
long mul = 1;
long
long ant; //二進位制末尾為1的個數
while (num[1])
ans += (((ant-1) * ant) >> 1) * mul; //與運算
//看了半天才知道這個 (ant-1) * ant) >> 1 的意思是 組和:把自己去掉然後與每個陣列和,根據組和原理,就會知道還要除以 2 ,就是 c(n,2)的意思咯~
ans += ((n-ant) * ant + (((ant-1) * ant) >> 1)) * mul; //或運算
ans += ((n-ant) * ant) * mul; //異或運算
mul <<= 1;
}printf ("%lld\n",ans);
}return
0;}
zzuli 1921 (二進位制序列)
二進位制,dp 原題 description 給定乙個長度為n的數字序列a,從中選取乙個長為m的子串行b滿足 b i b i 1 0 2 i m 求最大的m。input 第一行輸入乙個整數t,代表有t組測試資料。每組資料第一行輸入乙個整數n代表a序列的長度,接下來一行輸入n個正整數表示ai 0 ou...
zzuli 1068 二進位制數
題目描述 將乙個二進位制數,轉換為對應的十進位制數。輸入輸入乙個二進位制數,以回車結束。該二進位制數為正數,長度不超過31。輸出輸出乙個整數,為該二進位制數對應的十進位制數。樣例輸入 copy 100000000001樣例輸出 copy 2049提示 1 整數運算盡量避免pow之類的double型別...
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...