Solutions of Permutations - MarisaOJ: Marisa Online Judge

Solutions of Permutations

Select solution language

Write solution here.


User Avatar vdgminh    Created at    0 likes

# NGHĨ KĨ TRƯỚC KHI LÀM, CHỈ ĐỌC SOL KHI BÍ --- ## Ý tưởng 1. Ta dùng một [vector](https://blog.28tech.com.vn/stl-vector-trong-c) để lưu chỉnh hợp. 2. Lập một hàm backtrack gồm 3 tham số là biến $n$, $k$ và vector $v$. 3. Chạy một vòng lặp từ 1 tới n, tìm trong vector bằng hàm [find](https://cplusplus.com/reference/algorithm/find/) để tìm và kiểm tra xem $i$ đã ở trong vector chưa. 4. Khi vector đủ $k$ phần tử, trả ra kết quả. ### *một vài lưu ý:* - hàm `find` sẽ trả ra kết quả là một **iterator** thể hiện vị trí của phần tử cần tìm, không phải là **số**. - dấu $&$ trong dòng 4 của code mang nghĩa là tham chiếu (reference), hiểu đơn giản là nếu biến trong hàm thay đổi thì bên ngoài cũng thay đổi theo. - có thể truy cập link [này](https://howkteam.vn/course/truyen-tham-chieu-cho-ham-passing-arguments-by-reference/bien-tham-chieu-trong-creference-variables-2790) để rõ hơn về reference. - ~~bài [này](https://open.spotify.com/track/0tjncEeLWvpmFMaLzZ7dFb?si=2d2df7271f7d46f6) hay :3~~ --- ## Code: # NHẤN MẠNH LẠI, KHÔNG NÊN CHÉP CODE ```cpp #include <bits/stdc++.h> using namespace std; #define int long long void bt(vector<int> &v, int k, int n){ if(v.size() == k){ for(int i : v) cout << i << " "; cout << '\n'; return; } for(int i = 1; i <= n; i++){ if(find(v.begin(), v.end(), i) == v.end()){ //nếu i không tồn tại trong vector, hàm sẽ trả ra kết quả là end() của v v.push_back(i); bt(v, k, n); v.pop_back(); } } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, k; cin >> n >> k; vector<int> v; bt(v, k, n); return 0; } ```