LBC_2D - Nhị phân K

Xem dạng PDF

Gửi bài giải


Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Dạng bài

Cho 2 số ~N, K~. Yêu cầu liệt kê tất cả các chuỗi nhị phân có độ dài ~N~ theo thứ tự từ nhỏ đến lớn, mỗi xâu ký tự gồm có đúng ~K~ bit ~1~ liên tiếp. Ví dụ: ~0110~ có 2 bit ~1~ liên tiếp, ~0101~ chỉ có 1 bit ~1~ liên tiếp.

Input

  • Gồm 1 dòng chứa 2 số nguyên ~N, K~ được phân tách nhau bỏi dấu cách ~(1 \leq N \leq 20, 1 \leq K \leq N)~.

Output

  • Gồm nhiều dòng, mỗi dòng chứa 1 xâu nhị phân thoả mãn điều kiện đề bài.

Sample

Input #1
5 3
Output #1
00111
01110
10111
11100
11101

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    lehongduc  đã bình luận lúc 10, Tháng 5, 2024, 6:43 chỉnh sửa

    My solution:

    sử dụng quay lui cùng một biến đếm và một biến boolen, sau mỗi lần nhị phân nếu là 1 thì tăng biến đếm, nếu là 0 thì reset biến đếm, kiểm tra xem biến đếm có bằng k hay không, nếu bằng thì đổi giá trị boolen thành true rồi cho chạy quay lui tiếp và reset lại giá trị đếm. Khi độ dài của xâu bằng n, nếu biến boolen bằng true thì xuất xấu đó ra (biến boolen ban đầu là false)

    Code:

    include <bits/stdc++.h> define ll long long using namespace std; ll n,k,a[30]; void ham(int t,int s,bool b) { if(s==k) { a[t]=0; ham(t+1,0,true); return; } if(t>n) { if(b==true) { for(int i=1;i<=n;i++) cout<<a[i]; cout<<endl; } return; } a[t]=0; ham(t+1,0,b); a[t]=1; ham(t+1,s+1,b); return; } int main() { cin>>n>>k; memset(a,0,sizeof(a)); ham(1,0,false); }


  • -1
    hieugiangho2015  đã bình luận lúc 13, Tháng 2, 2024, 13:52

    ai fix giup em voi em thay dung het ma :((

    include <bits/stdc++.h>

    using namespace std;

    int n, a[100000], k; int sum = 0;

    void in() { for (int i = 1; i <= n; i++) { cout << a[i]; } cout << endl; }

    void Try(int i) { for (int j = 0; j <= 1; j++) { a[i] = j; sum += a[i]; if (i == n && sum == k) { in(); } else if (i < n) { Try(i + 1); } sum -= a[i]; } }

    int main() { iosbase::syncwith_stdio(false); cin.tie(NULL); cin >> n >> k; Try(1); return 0; }


  • 6
    tmtuan  đã bình luận lúc 23, Tháng 10, 2023, 1:10 chỉnh sửa

    My solution:

    Sử dụng quay lui để sinh dãy nhị phân có độ dài là N, và dùng hàm check để kiểm tra độ dài liên tiếp của bit 1, nếu kiểm tra độ dài bằng đúng k thì xuất ra dãy nhị phân đó

    Code: MyCode