# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
924218 | Camillus | Brperm (RMI20_brperm) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#define debug(...) 42
#include "bits/stdc++.h"
using namespace std;
#ifndef LOCAL
#include "brperm.h"
#else
void init(int n, const char s[]);
int query(int i, int k);
#endif
int n;
char ss[500500];
void init(int N, const char S[]) {
int n = N;
for (int i = 0; i < n; i++) {
ss[i] = S[i];
}
}
int swapped(int i, int k) {
int a = 1;
int b = 1 << (k - 1);
if (bool(i & a) == bool(i & b)) {
return i;
} else {
i ^= a;
i ^= b;
return i;
}
}
int query(int i, int k) {
if (i + (1 << k) > n) {
return false;
}
string t(s.begin() + i, s.begin() + i + (1 << k));
for (int j = 0; j < (1 << k); j++) {
if (t[j] != t[swapped(j, k)]) {
return false;
}
}
return true;
}
#ifdef LOCAL
char __s[(int)5e5 + 10] = {};
int main() {
cin >> __s;
init(strlen(__s), __s);
int __x, __y;
while (cin >> __x >> __y)
cout << query(__x, __y) << '\n';
return 0;
}
#endif