牛客小白月賽29 B二進位制

2022-07-09 11:06:10 字數 1651 閱讀 7966

牛客小白月賽29-b二進位制

題目描述:

scimoon 有乙個壞掉的計算器,這個計算器僅接受 \(0\sim 2^-1\) 的數

這個計算器只支援一種操作,舉個例子,輸入乙個數 x,這個數會按順序進行 n 次操作,在第 i 次操作中,有乙個操作符 \(op_i\)​ 和乙個數 \(a_i\)​

如果 \(op_i=1\) 表示這次操作是將數 x 與 \(a_i\)​ 做與運算

如果 \(op_i=2\) 表示這次操作是將數 x 與 \(a_i\)​ 做或運算

如果 \(op_i=3\) 表示這次操作是將數 x 與 \(a_i\)​ 做異或運算

操作過後 x 將會變為運算的結果

scimoon 覺得這個計算器非常地慢,於是他想對這 n 個運算做一些簡化,這個艱鉅的任務交給了你

具體而言,你的任務是:用不超過 5 次上面的操作,使得對於任何 \(0\le x\le 2^-1\),你的操作的輸出與計算器的輸出一致

可以證明必然存在解

可能存在多組解,你只需要輸出一組可能的解即可

輸入描述:
第一行乙個整數 n,表示計算器的操作次數

接下來 n 行,每行兩個整數 op 與 a ,按順序描述了每次操作

輸出描述:
第一行乙個 m,表示你的操作次數

你必須保證你輸出的 \(m\le 5\)

接下來 m 行每行仿照輸入中 \(op\ a\) 的格式輸出每次操作

示例:

輸入

1

1 14514

輸出

1

1 14514

備註

\(n \leq 5×10^5,1 \leq op \leq 3,0 \leq a \leq 2^−1\)

題解:

位運算是可以有捷徑的,分析可以發現,對於乙個數字存在如下情況:

所以我們只考慮可能改變量位的操作,即如下三種:

因此我們只需要考慮每次操作的數的各個位數,和執行的運算:

**:

#include #include using namespace std;

int v[21][4];

int main()

else if(op == 2 && w & 1 == 1)

else if(op == 3 && w & 1 == 1)

w >>= 1;}}

int a = 0, b = 0, c = 0;

for(int i = 0; i < 20; ++i)

for(int i = 0; i < 20; ++i)

}for(int i = 0; i < 20; ++i)

}printf("3\n1 %d\n2 %d\n3 %d\n", a, b ,c);

return 0;

}

牛客 2020 11 14牛客小白月賽29 B

by 041 本人原文 簡單的說,對於乙個bool量x x 1 x x 0 0 x 1 1 x 0 x x 1 x x 0 x 所以,對於每一次操作,在有影響 上面的2 3 5三種情況 到的位置加入相應操作的標記最後整合就行 對於第i位 0的操作 清空之前該位置所有的操作,加上標記1 對於第i位 1...

項鍊 牛客小白月賽29

scimoon 意外得到了乙個項鍊,這個項鍊非常的神奇 它有 n 個珠子,一開始每個珠子有乙個編號,從左到右編號分別是 1 至 n,scimoon 進行了 m 次操作,每次操作有下面這麼幾種 1 x y 表示將編號為 x 的珠子移到編號為 y 的珠子的後面 2 x y 表示將編號為 x 的珠子移到編...

二進位制列舉 思維 牛客小白月賽23 A題 膜法記錄

題目描述 牛牛最近在玩一款叫做 膜法記錄 的遊戲,這個遊戲的機制是這樣的 在一局遊戲中,所有的敵人都排布在乙個 n 行 m 列的網格中,牛牛指揮著他的魔法少女對敵人進行攻擊。攻擊有兩種型別 行blast,列blast 行blast能消滅一整行的敵人,列blast能消滅一整列的敵人 牛牛總共能夠釋放 ...