#include <cmath>
#include <string>
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) FOR(i,0,n)
#define PB push_back
#define SIZE(c) ((int)(c).size())
#define INT(x) int x; scanf("%d", &x)
const char a[] = "PAPPAA";
int check(const string& s) {
int n = SIZE(s);
int r = 0;
REP(i,n) FOR(j,i+1,n+1) {
bool ok = 1;
FOR(k,i,j) if (s[k] != s[i + j - k - 1]) {
ok = 0;
break;
}
if (ok) r = max(r, j - i);
}
return r;
}
string small(int n, int k) {
int n2 = 1 << n;
REP(m,n2) {
string s;
REP(i,n) s.PB(m & (1 << i) ? 'P' : 'A');
if (check(s) == k) return s;
}
return "NIE";
}
void oneCase() {
INT(n);
INT(k);
if (n < 9) {
printf("%s\n", small(n, k).c_str());
return;
}
if (k < 4) {
printf("NIE\n");
return;
}
REP(i,k) putchar('A');
REP(i,n-k) putchar(a[i % 6]);
putchar('\n');
}
int main() {
INT(t);
REP(tt,t) oneCase();
}
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 | #include <cmath> #include <string> using namespace std; #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define REP(i,n) FOR(i,0,n) #define PB push_back #define SIZE(c) ((int)(c).size()) #define INT(x) int x; scanf("%d", &x) const char a[] = "PAPPAA"; int check(const string& s) { int n = SIZE(s); int r = 0; REP(i,n) FOR(j,i+1,n+1) { bool ok = 1; FOR(k,i,j) if (s[k] != s[i + j - k - 1]) { ok = 0; break; } if (ok) r = max(r, j - i); } return r; } string small(int n, int k) { int n2 = 1 << n; REP(m,n2) { string s; REP(i,n) s.PB(m & (1 << i) ? 'P' : 'A'); if (check(s) == k) return s; } return "NIE"; } void oneCase() { INT(n); INT(k); if (n < 9) { printf("%s\n", small(n, k).c_str()); return; } if (k < 4) { printf("NIE\n"); return; } REP(i,k) putchar('A'); REP(i,n-k) putchar(a[i % 6]); putchar('\n'); } int main() { INT(t); REP(tt,t) oneCase(); } |
English