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.
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:
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