托公尺完成了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 的每條邊一行...