zzuli 1893(二進位制)

2021-07-16 06:54:26 字數 2016 閱讀 6451

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年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...