Hướng dẫn cho Rối loạn ám ảnh cưỡng chế


Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.

Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.

Authors: Prototype

Hướng dẫn giải: Rối loạn ám ảnh cưỡng chế

Phân tích

Với mỗi số \( N \):

  • Chuyển \( N \) sang hệ nhị phân
  • Kiểm tra xem chuỗi nhị phân có đối xứng hay không
\[ \text{binary}(N) = \text{reverse}(\text{binary}(N)) \]

Ý tưởng

  • Dùng hàm chuyển sang nhị phân
  • So sánh với chuỗi đảo

Độ phức tạp: \( O(T \cdot \log N) \)


Code C++

C++
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin >> t;

    while (t--) {
        int n;
        cin >> n;

        string b = "";

        while (n > 0) {
            b += char((n % 2) + '0');
            n /= 2;
        }

        string rev = b;
        reverse(rev.begin(), rev.end());

        if (b == rev)
            cout << "YES\n";
        else
            cout << "NO\n";
    }

    return 0;
}

Code Python

Python
t = int(input())
for _ in range(t):
    n = int(input())
    b = bin(n)[2:]
    if b == b[::-1]:
        print("YES")
    else:
        print("NO")

Code Java

Java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();

        while (t-- > 0) {
            int n = sc.nextInt();

            String b = Integer.toBinaryString(n);
            String rev = new StringBuilder(b).reverse().toString();

            if (b.equals(rev))
                System.out.println("YES");
            else
                System.out.println("NO");
        }
    }
}

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.