牛客練習賽23 C 托公尺的位運算

2021-08-21 20:18:57 字數 1010 閱讀 1092

托公尺完成了1317的上乙個任務,十分高興,可是考驗還沒有結束

說話間1317給了托公尺 n 個自然數 a1... an, 托公尺可以選出一些帶回家,但是他選出的數需要滿足一些條件

設托公尺選出來了k 個數 b1,b2... bk, 設這個數列 b 的給值為 b 中所有數按位與的結果,如果你能找到乙個整除 b 的最大的 2^v,(v≥ 0), 則設定 v 為這個數列的給價,如果不存在這樣的 v,則給價值為 -1, 1317 希望托公尺在最大化給價的情況下,最大化 k

第一行輸入乙個整數 n, 第二行輸入 a1...an
第一行輸出最大的整數 k, 第二行輸出 k 個整數 b1... bk, 按原數列的相對順序輸出 (如果行末有額外空格可能會格式錯誤)
示例1

複製

5

1 2 3 4 5

複製

2

4 5

n≤ 105, a1... an < 231
思路:乙個數能被2^v次方整除,說明該數的二進位制末尾是至少是連續的v個零。因為v不會超過31,所有我們可以從大到小列舉v,把大於等於1<>v)整除,則輸出結果(因為是相與,如果所有大於等於1<#include #include #include #include #include #include #include #include #include using namespace std;

#define n 370000

#define inf 0x3f3f3f3f

#define ll long long

int a[n];

int main()

vector res;

for(int i = 32; i >= 0; --i)

}if(sum % v == 0)

return 0;}}

printf("-1\n");

return 0;

}

牛客練習賽23 C 托公尺的位運算

point 首先明確,題目是讓我們從n個數中挑出k個數,他們 上之後的lowbit最大。在lowbit最大的前提下,k最大。遍歷答案v,即lowbit 2 v。for迴圈遍歷陣列,若在第v位存在1 二進位制 我們則肯定取這個數。因為最後k個數一起 後,如果存在答案,肯定是 xx100000這樣的形式...

牛客練習賽23 C 托公尺的位運算(模擬)

托公尺完成了1317的上乙個任務,十分高興,可是考驗還沒有結束 說話間1317給了托公尺 n 個自然數 a1.an,托公尺可以選出一些帶回家,但是他選出的數需要滿足一些條件 設托公尺選出來了k 個數 b1,b2.bk,設這個數列 b 的給值為 b 中所有數按位與的結果,如果你能找到乙個整除 b 的最...

牛客練習賽23 托公尺的遊戲 概率,期望

題目背景編不下去了 托公尺有一棵有根樹 t,樹根為1,每輪他會在剩下的子樹中等概率乙個點 u,砍掉 u 的子樹 包含 u 如果樹上的點都被砍光了,遊戲結束。求出這個遊戲進行的期望輪數,可以證明這個數一定是有理數,設他為 第一行輸入乙個數 n,表示 t 的點數,下面 n 1 行給出了 t 的每條邊一行...