牛客小白月賽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能消滅一整列的敵人 牛牛總共能夠釋放 ...