c - 超級密碼
time limit:10000msmemory limit:32768kb64bit io format:%i64d & %i64u
submit
status
description
ignatius花了乙個星期的時間終於找到了傳說中的寶藏,寶藏被放在乙個房間裡,房間的門用密碼鎖起來了,在門旁邊的牆上有一些關於密碼的提示資訊:
密碼是乙個c進製的數,並且只能由給定的m個數字構成,同時密碼是乙個給定十進位制整數n(0<=n<=5000)的正整數倍(如果存在多個滿足條件的數,那麼最小的那個就是密碼),如果這樣的密碼存在,那麼當你輸入它以後門將開啟,如果不存在這樣的密碼......那就把門炸了吧.
注意:由於寶藏的歷史久遠,當時的系統最多只能儲存500位密碼.因此如果得到的密碼長度大於500也不能用來開啟房門,這種情況也被認為密碼不存在.
input
輸入資料的第一行是乙個整數t(1<=t<=300),表示測試資料的數量.每組測試資料的第一行是兩個整數n(0<=n<=5000)和c(2<=c<=16),其中n表示的是題目描述中的給定十進位制整數,c是密碼的進製數.測試資料的第二行是乙個整數m(1<=m<=16),它表示構成密碼的數字的數量,然後是m個數字用來表示構成密碼的數字.兩個測試資料之間會有乙個空行隔開.
注意:在給出的m個數字中,如果存在超過10的數,我們約定用a來表示10,b來表示11,c來表示12,d來表示13,e來表示14,f來表示15.我保證輸入資料都是合法的.
output
對於每組測試資料,如果存在要求的密碼,則輸出該密碼,如果密碼不存在,則輸出"give me the bomb please".
注意:構成密碼的數字不一定全部都要用上;密碼有可能非常長,不要試圖用乙個整型變數來儲存密碼;我保證密碼最高位不為0(除非密碼本身就是0).
sample input
322 10
37 0 1
2 1011
25 16
3a b c
sample output
110give me the bomb please
ccb
huge input, scanf is recommended.
hint
hint
思路:網上說是bfs+同餘定理,這麼多juju;
如果a%n==b%n,那麼(a*p+k)%n=(b*p+k)%n;
拿到此題看到題目給的是10s想暴力,但最後還是放棄了,我們不要寄希望於去列舉所給的十進位制的倍數,然後看給出的c進製數能否湊出來,因為題目要求的500位,如果給你3你要翻多少次才能達到500位?
對於此題我們需要用bfs每次列舉乙個字元,在結構體中記錄下來,然後壓入佇列,直到超過500位或者符合題目要求即可;
最重要的一點,此題我們使用同餘定理來判重,這樣可以大大減少次數從而達到優化,還有就是對16進製制的處理;c進製數的轉換問題;
此題的坑點就是當n==0時如果有0就那麼答案就是0,否則就輸出
give me the bomb please
#include
#include
#include
#include
using
namespace std;
int n,c,m;
int num[
20];
int book[
5200
];struct
node
;void
(node
x)printf("
\n");}
intmod
(node
x)return ans;
}void
bfs()
else}}
}while
(!q.
empty
())else}}
}}printf
("give me the bomb please\n"
);}intmain
()if
(n==0)
else
}return0;
}
hdu1226 超級密碼 bfs
思路 因為n 5000 所以方案個數也只有5000個,可以用bfs來做。一開始挺糾結怎麼做,但是上網一看別的大牛的 一下子就恍然大悟豁然開朗,如同撥開雲霧見青天 o include include include include using namespace std const int maxn ...
HDU1226 超級密碼 BFS
由於n最大也只有5000,則對於列舉的密碼s,s n的狀態也只有5000種。所以每乙個列舉到的狀態,開兩個內容,乙個表示密碼的字串,乙個表示模n的餘數,當餘數為0的時候,說明找到密碼。include include include include include using namespace st...
HDU1226 超級密碼(BFS)
題目大意 求乙個數,它是由m個數字組成,是c進製,且是n 10進製整數 的整數倍。求這個數的最小值。例如n 22,c 10,m 3,三個數字是7,0,1 那麼滿足由7,0,1組成的10進製數且是22的倍數的最小值是110。由於求的數是最小的,用bfs比dfs更好一些。用bfs實現由數字組成的數按從小...