Code bị lỗi thực thi (Runtime Error)

chào mn ạ. Mn cho e hỏi code của e bị lỗi thực thi vì nguyên nhân gì với ạ. Cảm ơn mn nhiều!

Đề bài:

Một dãy số tự nhiên bắt đầu bởi con số 1 và được thực hiện N-1 phép biến đổi “gấp đôi” dãy số như sau:

Với dãy số A hiện tại, dãy số mới có dạng A, x, A trong đó x là số tự nhiên bé nhất chưa xuất hiện trong A.

Ví dụ với 2 bước biến đổi, ta có [1] à [1 2 1] à [1 2 1 3 1 2 1].

Các bạn hãy xác định số thứ K trong dãy số cuối cùng là bao nhiêu?

Input:

Dòng đầu tiên là số lượng bộ test T (T ≤ 20).

Mỗi test gồm số nguyên dương N và K (1 ≤ N ≤ 50, 1 ≤ K ≤ 2N - 1).

Output:

Với mỗi test, in ra đáp án trên một dòng.

Ví dụ:

Input Output
2
3 2
4 8
2
4

Giải thích test 1: Dãy số thu được là [1, 2, 1, 3, 1, 2, 1].

Giải thích test 2: Dãy số thu được là [1, 2, 1, 3, 1, 2, 1, 4, 1, 2, 1, 3, 1, 2, 1].

#include<bits/stdc++.h>
using namespace std;
int main(){
    int t;
    cin>>t;
    while(t--){
        long long n,k;
        cin>>n>>k;
        string s = "1";
        string res = "";
        long long x = 1;
        long long j=n-1;
        while(j--){
            string tmp = string(s.rbegin(),s.rend());
            x++;
            res = s + to_string(x) + tmp;
            s = res;
        }
        cout<<res[k-1]<<endl;
    }
}

2^50 kí tự nhé bạn :smiley:

Bài này đánh số từ 1 và xử lí bit thôi.

2 Likes

bạn có thể nói rõ hơn về 2^50 kí tự thì sao đc không.
Và nói rõ hơn về giải pháp với :))

Dễ thấy vị trí ii+2^{N-1} giống nhau theo định nghĩa. Ngoài ra phần tử mới luôn được đưa vào ở vị trí 2^{N-1}. Như vậy là giải được rồi.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?