fork download
  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4. #include <string>
  5. using namespace std;
  6.  
  7. // Hàm tìm số nhỏ nhất chỉ chứa {0, 1} và là bội của n
  8. string findSmallestMultiple(int n) {
  9. // Hàng đợi lưu trữ trạng thái (phần dư, chuỗi nhị phân)
  10. queue<pair<int, string>> q;
  11. // Mảng đánh dấu để tránh lặp trạng thái
  12. vector<bool> visited(n, false);
  13.  
  14. // Khởi tạo trạng thái ban đầu với "1"
  15. q.push({1 % n, "1"});
  16. visited[1 % n] = true;
  17.  
  18. while (!q.empty()) {
  19. auto [remainder, binary] = q.front();
  20. q.pop();
  21.  
  22. // Nếu phần dư là 0, trả về kết quả
  23. if (remainder == 0) {
  24. return binary;
  25. }
  26.  
  27. // Sinh các trạng thái tiếp theo bằng cách thêm "0" và "1"
  28. for (int digit : {0, 1}) {
  29. int newRemainder = (remainder * 10 + digit) % n;
  30. if (!visited[newRemainder]) {
  31. visited[newRemainder] = true;
  32. q.push({newRemainder, binary + char('0' + digit)});
  33. }
  34. }
  35. }
  36.  
  37. return ""; // Trường hợp không tìm thấy (không xảy ra với n > 0)
  38. }
  39.  
  40. int main() {
  41. int n;
  42. cin >> n;
  43. cout << findSmallestMultiple(n) << endl;
  44. return 0;
  45. }
Success #stdin #stdout 0s 5284KB
stdin
6
stdout
1110