#include <bits/stdc++.h>
using namespace std;
#define fors(u, n, s) for(int u = (s); u<(n); u++)
#define foru(u, n) fors(u, n, 0)
#define f first
#define s second
#define vec vector
#define pb push_back
#define sz(x) ((int)x.size())
typedef long long ll;
#define debug(x) cout << __LINE__ << " | " << x << endl
// #define debug(x) {}
int longest_palindrome(vec<bool> &v){
int n = sz(v);
int ans = 0;
foru(mid, n){
int l = mid;
int r = mid;
while(l != 0 && r != n-1){
if(v[l-1] == v[r+1])
l--,
r++;
else
break;
}
ans = max(ans, r-l+1);
}
foru(mid, n-1){
int l = mid;
int r = mid+1;
if(v[l] != v[r]) continue;
while(l != 0 && r != n-1){
if(v[l-1] == v[r+1])
l--,
r++;
else
break;
}
ans = max(ans, r-l+1);
}
return ans;
}
map<pair<int, int>, vec<bool>> mp;
void solve() {
int n, k; cin >> n >> k;
vec<bool> out;
if(n < 15){
if(mp.find({n, k}) != mp.end()) out = mp[{n, k}];
} else if(k >= 4) {
foru(_i, k) out.pb(false);
vec<bool> h = {true, false, true, true, false, false};
int h_idx = 0;
while(sz(out) != n){
out.pb(h[h_idx]);
h_idx = (h_idx+1)%sz(h);
}
}
if(out.empty()) cout << "NIE" << endl;
else{
for(auto i : out) cout << (i ? 'P' : 'A');
cout << endl;
}
}
int main()
{
// cin.tie(0); cout.tie(0);
// ios_base::sync_with_stdio(0);
fors(i, 15, 1){
foru(_mask, 1<<i){
int mask = _mask;
vec<bool> v;
foru(_i, i) v.pb(mask&1), mask >>= 1;
mp[{i, longest_palindrome(v)}] = v;
}
}
int t; cin >> t;
foru(_i, t)
solve();
return 0;
}
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 93 94 95 96 97 98 99 100 101 102 103 104 | #include <bits/stdc++.h> using namespace std; #define fors(u, n, s) for(int u = (s); u<(n); u++) #define foru(u, n) fors(u, n, 0) #define f first #define s second #define vec vector #define pb push_back #define sz(x) ((int)x.size()) typedef long long ll; #define debug(x) cout << __LINE__ << " | " << x << endl // #define debug(x) {} int longest_palindrome(vec<bool> &v){ int n = sz(v); int ans = 0; foru(mid, n){ int l = mid; int r = mid; while(l != 0 && r != n-1){ if(v[l-1] == v[r+1]) l--, r++; else break; } ans = max(ans, r-l+1); } foru(mid, n-1){ int l = mid; int r = mid+1; if(v[l] != v[r]) continue; while(l != 0 && r != n-1){ if(v[l-1] == v[r+1]) l--, r++; else break; } ans = max(ans, r-l+1); } return ans; } map<pair<int, int>, vec<bool>> mp; void solve() { int n, k; cin >> n >> k; vec<bool> out; if(n < 15){ if(mp.find({n, k}) != mp.end()) out = mp[{n, k}]; } else if(k >= 4) { foru(_i, k) out.pb(false); vec<bool> h = {true, false, true, true, false, false}; int h_idx = 0; while(sz(out) != n){ out.pb(h[h_idx]); h_idx = (h_idx+1)%sz(h); } } if(out.empty()) cout << "NIE" << endl; else{ for(auto i : out) cout << (i ? 'P' : 'A'); cout << endl; } } int main() { // cin.tie(0); cout.tie(0); // ios_base::sync_with_stdio(0); fors(i, 15, 1){ foru(_mask, 1<<i){ int mask = _mask; vec<bool> v; foru(_i, i) v.pb(mask&1), mask >>= 1; mp[{i, longest_palindrome(v)}] = v; } } int t; cin >> t; foru(_i, t) solve(); return 0; } |
English