競碼程式設計 藍橋杯模擬賽4 H 友好組合

2021-10-23 01:13:46 字數 1332 閱讀 3826

問題:jm同學在研究排列排列時發現一種有趣的組合,命名成友好組合。

當兩個數的二進位制表示中至少有kk個位置上的值不同,則稱這兩個數是相對安全。

例如:數字60轉成二進位制為:0 1 1 1 1 0 0

數字85轉成二進位制為:1 0 1 0 1 0 1

加粗位置上對應的值不同,60與85共有4個位置上的不同

他對友好組合的定義為:在nn個數中(0,1,2,…n-1)(0,1,2,…n−1)選出mm個數,這mm個數中任意兩個都是相對安全的。

你能夠幫wlxsq找出一種友好組合嗎?當然,如果有多組滿足條件的解,請輸出字典序最小的解。

輸入

輸入一行包含三個整數:n,m,kn,m,k,其表示的意思如題目描述

輸出

輸出字典序最小的友好組合,共mm個十進位制數。從小到大排序,相鄰兩個數字中間用空格隔開,每1010個一行。

資料保證至少能找到一種滿足條件的友好組合

樣例

輸入8 2 2

輸出0 3

輸入256 5 4

輸出0 15 51 60 85

提示資料規模

1≤n≤256,1≤m≤64,1≤k≤7,資料保證nn均為22的冪次

解題思路

這一題是競碼程式設計藍橋杯模擬賽的題,據說達到了b+的難度,額,我最後爆零,編譯錯誤(淦!理由是藍橋杯裡應該不能用itoa)

這一題的思路是,深度優先dfs,建立乙個結果序列,先將0加入到序列,從1開始往大找,每次找乙個數時,將它與結果序列中的每乙個數進行檢測,符合條件就加入序列。直到找齊n個數。

具體的**如下 ,dfs模板 加了乙個check做判斷,判斷用的是 按位與比較。

原始碼(c++)

#include

using

namespace std;

int book[

257]=;

int res[64]

;int m,n,k;

bool

check

(int step,

int i)

a=a>>1;

b=b>>1;

}if(sum}return1;

};void

dfs(

int step)

exit(0

);}for

(int i=

0;i};

intmain()

競碼程式設計 藍橋杯模擬賽5(試題I 調皮的JM)

剛開始只想到第一種,但是100 的資料絕對過不了,後來看提示半天過去了寫出來第二種,以此紀念寫出 的激動心情。小白的生存之道,太難了。第一種 public class main1 for int i 0 i h.length i b 0l c 0 這裡的i實現在字串h中按乙個字元乙個字元地向後面滑動...

2019 藍橋杯省賽 B 組模擬賽 程式設計 好友

題目 如下 includeusing namespace std int a 100005 int main 這道題如果你用暴力每次回溯去計算次數,就算加乙個優化,還是不能通過全部資料,因為暴力的複雜度達到了o n 2 這道題要用到二分的思想,首先將所有漁民房子的座標從小到大排序,然後從第乙個開始尋...

藍橋杯2023年4月模擬賽部分試題

問題描述 小明和朋友們一起去郊外植樹,他們帶了一些在自己實驗室精心研究出的小樹苗。小明和朋友們一共有n個人,他們經過精心挑選,在一塊空地上每個人挑選了乙個適合植樹的位置,總共n個。他們準備把自己帶的樹苗都植下去。然而,他們遇到了乙個困難 有的樹苗比較大,而有的位置挨太近,導致兩棵樹植下去後會撞在一起...