二進位制?列舉?二進位制列舉?聽都沒聽過。
然而在我還沒搞懂的時候,大佬們已經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...