#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define st first
#define nd second
#define ld long doubl
string napis(vector<int> &a) {
string x = {'A', 'P'};
string s;
for (int i = 0; i < a.size(); i++) {
s.push_back(x[a[i]]);
}
return s;
}
map<pair<int, int>, string> wyniki;
void solve() {
int n, k;
cin >> n >> k;
if (n < 9) {
cout << wyniki[{n, k}] << '\n';
return;
}
if (k < 4) {
cout << "NIE\n";
return;
}
vector<int> a (k, 0);
if (n==k) {
cout << napis(a) << '\n';
return;
}
a.push_back(1);
while (a.size() < n) {
int l = a.size();
if (a[l-1]==a[l-2]) {
a.push_back(a[l-3]);
continue;
}
if (a[l-1] == a[l-3]) {
a.push_back(a[l-4]^1);
continue;
}
if (a[l-1]==a[l-4]&&a[l-2]==a[l-3]) {
a.push_back(a[l-5]^1);
continue;
}
a.push_back(a[l-4]);
}
cout << napis(a) << '\n';
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
srand(67);
for (int m = 1; m <= 8; m++) {
for (int j = 1; j <= m; j++) {
wyniki[{m, j}] = "NIE";
}
for (int _ = 0; _ < 200; _++) {
int r = rand()%(1<<m);
vector<int> a (m);
for (int i = 0; i < m; i++) {
a[i] = r%2;
r /= 2;
}
int x = 0;
for (int i = 0; i < m; i++) {
for (int j = i; j < m; j++) {
bool q = 0;
for (int k = 0; k <= j-i; k++) {
if (a[i+k] != a[j-k]) {
q = 1;
break;
}
}
if (!q) x = max(x, j-i+1);
}
}
wyniki[{m, x}] = napis(a);
}
}
int t=1;
cin >> t;
for (int i = 0; i < t; i++) {
solve();
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #include <bits/stdc++.h> using namespace std; #define ll long long #define st first #define nd second #define ld long doubl string napis(vector<int> &a) { string x = {'A', 'P'}; string s; for (int i = 0; i < a.size(); i++) { s.push_back(x[a[i]]); } return s; } map<pair<int, int>, string> wyniki; void solve() { int n, k; cin >> n >> k; if (n < 9) { cout << wyniki[{n, k}] << '\n'; return; } if (k < 4) { cout << "NIE\n"; return; } vector<int> a (k, 0); if (n==k) { cout << napis(a) << '\n'; return; } a.push_back(1); while (a.size() < n) { int l = a.size(); if (a[l-1]==a[l-2]) { a.push_back(a[l-3]); continue; } if (a[l-1] == a[l-3]) { a.push_back(a[l-4]^1); continue; } if (a[l-1]==a[l-4]&&a[l-2]==a[l-3]) { a.push_back(a[l-5]^1); continue; } a.push_back(a[l-4]); } cout << napis(a) << '\n'; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); srand(67); for (int m = 1; m <= 8; m++) { for (int j = 1; j <= m; j++) { wyniki[{m, j}] = "NIE"; } for (int _ = 0; _ < 200; _++) { int r = rand()%(1<<m); vector<int> a (m); for (int i = 0; i < m; i++) { a[i] = r%2; r /= 2; } int x = 0; for (int i = 0; i < m; i++) { for (int j = i; j < m; j++) { bool q = 0; for (int k = 0; k <= j-i; k++) { if (a[i+k] != a[j-k]) { q = 1; break; } } if (!q) x = max(x, j-i+1); } } wyniki[{m, x}] = napis(a); } } int t=1; cin >> t; for (int i = 0; i < t; i++) { solve(); } } |
English