#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <cmath>
#include <unordered_set>
#include <unordered_map>
#include <cassert>
#include <numeric>
#include <deque>
int main()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
/*
long long iloczyn = 1;
for (int i = 20; i >= 11; ++i)
{
iloczyn *= i;
iloczyn /= 21 - i;
}
std::cerr << iloczyn << "\n";
std::cerr << log2(3000000) << "\n";
return 0;*/
int t;
std::cin >> t;
for (int test = 0; test < t; ++test)
{
int dlugoscSlowa;
int dlugoscPalindromu;
std::cin >> dlugoscSlowa >> dlugoscPalindromu;
if (dlugoscSlowa < 10)
{
bool czyPalindromZnaleziony = false;
for (long long slowo = 0; slowo < (1ll << dlugoscSlowa); ++slowo)
{
int maxPalindrom = 0;
for (int start = 0; start <= dlugoscSlowa; ++start)
{
for (int end = start + 1; end <= dlugoscSlowa; ++end)
{
bool czyPalindrom = true;
for (int i = 0; i < end - start; ++i)
{
bool czyPoczatek = (slowo & (1ll << (start + i))) > 0;
bool czyKOniec = (slowo & (1ll << (end - i - 1))) > 0;
if (czyPoczatek != czyKOniec)
{
czyPalindrom = false;
break;
}
}
if (czyPalindrom)
maxPalindrom = std::max(maxPalindrom, end - start);
}
}
if (maxPalindrom == dlugoscPalindromu)
{
for (int i = 0; i < dlugoscSlowa; ++i)
{
if ((slowo & (1 << i)) > 0)
std::cout << "P";
else
std::cout << "A";
}
std::cout << "\n";
czyPalindromZnaleziony = true;
break;
}
}
if (!czyPalindromZnaleziony)
{
std::cout << "NIE\n";
}
continue;
}
if (dlugoscPalindromu <= 3)
{
std::cout << "NIE\n";
continue;
}
std::string ciag = "PAPPAA";
for (int i = 0; i < dlugoscPalindromu; ++i)
{
std::cout << "A";
}
for (int i = 0; i < dlugoscSlowa - dlugoscPalindromu; ++i)
{
std::cout << ciag[i % 6];
}
std::cout << "\n";
}
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 | #include <iostream> #include <vector> #include <set> #include <algorithm> #include <cmath> #include <unordered_set> #include <unordered_map> #include <cassert> #include <numeric> #include <deque> int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); /* long long iloczyn = 1; for (int i = 20; i >= 11; ++i) { iloczyn *= i; iloczyn /= 21 - i; } std::cerr << iloczyn << "\n"; std::cerr << log2(3000000) << "\n"; return 0;*/ int t; std::cin >> t; for (int test = 0; test < t; ++test) { int dlugoscSlowa; int dlugoscPalindromu; std::cin >> dlugoscSlowa >> dlugoscPalindromu; if (dlugoscSlowa < 10) { bool czyPalindromZnaleziony = false; for (long long slowo = 0; slowo < (1ll << dlugoscSlowa); ++slowo) { int maxPalindrom = 0; for (int start = 0; start <= dlugoscSlowa; ++start) { for (int end = start + 1; end <= dlugoscSlowa; ++end) { bool czyPalindrom = true; for (int i = 0; i < end - start; ++i) { bool czyPoczatek = (slowo & (1ll << (start + i))) > 0; bool czyKOniec = (slowo & (1ll << (end - i - 1))) > 0; if (czyPoczatek != czyKOniec) { czyPalindrom = false; break; } } if (czyPalindrom) maxPalindrom = std::max(maxPalindrom, end - start); } } if (maxPalindrom == dlugoscPalindromu) { for (int i = 0; i < dlugoscSlowa; ++i) { if ((slowo & (1 << i)) > 0) std::cout << "P"; else std::cout << "A"; } std::cout << "\n"; czyPalindromZnaleziony = true; break; } } if (!czyPalindromZnaleziony) { std::cout << "NIE\n"; } continue; } if (dlugoscPalindromu <= 3) { std::cout << "NIE\n"; continue; } std::string ciag = "PAPPAA"; for (int i = 0; i < dlugoscPalindromu; ++i) { std::cout << "A"; } for (int i = 0; i < dlugoscSlowa - dlugoscPalindromu; ++i) { std::cout << ciag[i % 6]; } std::cout << "\n"; } return 0; } |
English