1. 程式人生 > >51nod1109(bfs)

51nod1109(bfs)

http void pair span fine 題意 ron code for

題目鏈接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1109

題意:中文題誒~

思路:可以用二叉樹構建,根節點為 1,左兒子為 0,右兒子為 1.然後直接bfs一遍就好了;

註意:直接用十進制記錄可能會tle或mle.可以用二進制形式記錄,再存儲到十進制數裏,輸出時再還原成二進制形式就好了;

代碼:

技術分享
 1 #include <iostream>
 2 #include <queue>
 3 #define ll long long
 4 using namespace std;
 5 
 6
int n; 7 ll ans; 8 string res; 9 10 void bfs(void){ 11 queue<pair<int,int> > q; 12 q.push({1, 1}); 13 ll cnt, cnt1, cnt2; 14 while(!q.empty()){ 15 cnt = q.front().first; 16 int x = q.front().second; 17 q.pop(); 18 cnt1 = cnt * 2; 19 cnt2 = cnt * 2
+ 1; 20 if((x * 10) % n == 0){ 21 ans = cnt1; 22 break; 23 } 24 if((x * 10 + 1) % n == 0){ 25 ans = cnt2; 26 break; 27 } 28 q.push({cnt1, (x * 10) % n}); 29 q.push({cnt2, (x * 10 + 1) % n }); 30 } 31 while
(ans){ 32 res += (ans % 2 + 0); 33 ans /= 2; 34 } 35 for(int i = res.size()-1; i >= 0; i--){ 36 cout << res[i]; 37 } 38 cout << endl; 39 } 40 41 int main(void){ 42 cin >> n; 43 bfs(); 44 }
View Code

51nod1109(bfs)