2020大一寒假ACM培訓 (二進位制列舉篇)

2021-10-01 21:49:10 字數 3477 閱讀 6774

二進位制?列舉?二進位制列舉?聽都沒聽過。

然而在我還沒搞懂的時候,大佬們已經ak了。

otr otr otr

acm培訓(大佬鑑賞大賽)真快樂!

讓我這個小菜雞先來搞懂什麼是二進位制列舉吧。

一、二進位制操作

算數字運算:

1、與(&):

對於指定的兩個數a=60(0011 1100) 

b=13(0000 1101)

執行一下&操作 a&b=12(0000 1100)

就是對二進位制每一位進行了一次與操作,同為1,結果為1,否則為0

2、或(|):
對於指定的兩個數a=60(0011 1100) 

b=13(0000 1101)

執行一下|操作 a|b=61(0011 1101)

就是對二進位制每一位進行了一次或操作,同為0,結果為0,否則為1

3、非 按位取反(~):
對於指定的乙個數a=60(0011 1100)

執行以下~操作 ~a=195(1100 0011)

就是對二進位制每一位進行了一次取反操作,若二進位制數字0,則變成1,否則變成0.

4、異或運算 (^) :

異或,英文為exclusive or,縮寫成xor

異或(xor)是乙個數**算符。它應用於邏輯運算。異或的數學符號為「⊕」,計算機符號為「xor」。其運算法則為:

a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。

異或也叫半加運算,其運算法則相當於不帶進製的二進位制加法:二進位制下用1表示真,0表示假,則異或的運算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進製。

異或的性質:

乙個數與另乙個數異或兩次是其本身

在c/c++中異或用^符號表示;

例如:對於指定的兩個數 a=60(0011 1100)

b=13(0000 1101)

執行一下操作 a^b=49(0011 0001)

就是對二進位制每一位進行了一次異或操作,即非進製加法。

詳細版異或講解請參見

什麼是異或_異或運算及異或運算的作用

異或運算及其在演算法中的運用

二、二進位制移位操作符:

移位操作有左移與右移:

1、左移<<

例如:a=5(0101)

如果向左移動一位即a<<1結果為1010,十進位制的10。二進位制中的左移就是乘二操作,在c/c++中左移運算速度比乘二速度要快。

2、右移》
例如:a=5(0101)

如果向右移動一位即a>>1結果為0010,十進位制的2。二進位制中的左移就是除二操作(捨去小數)。

三、二進位制列舉

直接參見吧

二進位制列舉–最通俗易懂的講解

徹底搞懂二進位制列舉

好了,現在開始被題目虐爆吧。

字串的異或。

#include

using

namespace std;

int n,k,i,j;

string a,ans;

intmain()

printf

("scenario #%d\n"

,++k)

; cout<}return0;

}

普通的異或。

#include

using

namespace std;

long

long ans,n,x,s;

intmain()

printf

("%lld\n"

,ans);}

return0;

}

這題注意大小。

二進位制!列舉!

#include

using

namespace std;

int n,a[

1000000];

long

long k,s;

intmain()

for(i=

0;i<(1

<;i++)if

(s==k)}if

(f==1)

}return0;

}

(吐槽下題目名字為什麼不叫陳老師奧力給。)

依舊二進位制列舉。

#include

using

namespace std;

int t;

intmain()

else}if

(jyz==

5&&lk==

10&&tmp==0)

f++;}

cout<}return0;

}

#include

using

namespace std;

int s,f,a[25]

;int

main()

for(i=

0; i<(1

<; i++)}

if(s==p)

}printf

("%d\n"

,f);

}return0;

}

這個題需要多讀幾遍題。

#include

using

namespace std;

int n,t,a[25]

,b[25

],s,sum;

intmain()

for(i=

0; i<(1

<; i++)}

if(s>

(sum/2)

)}}for

(i=0

; i)printf

("\n");

}return0;

}

一道數學期望題。

說實話題目描述沒看懂。

#include

using

namespace std;

int t,cnt,x;

double a[15]

,b[15

],c[15]

,wa[15]

,ac[15]

,p,ans;

intmain()

else

p=p*wa[j];}

if(cnt==x)

ans+

=p;}

printf

("%.4lf\n"

,ans);}

return0;

}

終於把之前鴿的部落格都更完了!

二進位制列舉真快樂!今天依舊是仰望大佬的一天!

2020大一寒假ACM培訓 (優先佇列篇)

優先佇列是一種具有受限訪問操作的儲存結構,元素可以以任意順序進入優先佇列,一旦元素在優先佇列容器中,出隊操作將出佇列中優先順序最高的元素。可以理解為元素進入優先佇列自動排序 構建 priority queue int,vector int greater int s 公升序排列 priority q...

2023年大一第一次寒假培訓二維陣列和結構體

最好用c 用c 打c的 也可以。最先打萬能標頭檔案 include。一,二維陣列 一維陣列 a n 相當於乙個1n的長方形,那麼二維陣列b n m 就相當於乙個nm的長方形。定義時,可以省略第一維的大小,但第二維的大小不可省略。向a 2 3 中輸入1 2 3 4 5 6,儲存的狀態就如 所示。45 ...

大一寒假訓練四(位運算 二進位制列舉) 更新完成

思路就是把所有字串的每個字元依次異或,字元對應得ascii碼也是乙個數字,所以字元也可以去異或。而且在二進位制中,0與任何數異或都等於那個數本身。include using namespace std int n,i,j,cas string x,ans intmain printf scenari...