lexicographical (alphabetical) order
B. K-th Beautiful String
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
For the given integer () let's write down all the strings of length which contain letters 'a' and two letters 'b' in lexicographical (alphabetical) order.
Recall that the string of length is lexicographically less than string of length , if there exists such (), that , and for any () . The lexicographic comparison of strings is implemented by the operator < in modern programming languages.
For example, if the strings are (the order does matter):
- aaabb
- aabab
- aabba
- abaab
- ababa
- abbaa
- baaab
- baaba
- babaa
- bbaaa
It is easy to show that such a list of strings will contain exactly strings.
You are given () and (). Print the -th string from the list.
Input
The input contains one or more test cases.
The first line contains one integer () — the number of test cases in the test. Then test cases follow.
Each test case is written on the the separate line containing two integers and (.
The sum of values over all test cases in the test doesn't exceed .
Output
For each test case print the -th string from the list of all described above strings of length . Strings in the list are sorted lexicographically (alphabetically).
Example
input
Copy
7 5 1 5 2 5 8 5 10 3 1 3 2 20 100
output
Copy
aaabb aabab baaba bbaaa abb bab aaaaabaaaaabaaaaaaaa
- aaabb
- aabab
- aabba
- abaab
- ababa
- abbaa
- baaab
- baaba
- babaa
- bbaaa
যখন দুটি b পাশাপাশি থাকে তখন মাত্র পরের ধাপে বামের b টি ১ ঘর বামে এবং ডানের b টি সর্ব ডানে প্রথিস্থাপন হয়। এর পর পুনয়ায় ডানের b টি এক ঘর করে ডানের দিকে আসে। যতক্ষণ না ডানের b টির ঠিক পাশে উপস্থিত না হয়।
এক্ষেত্রে, b ২টি পাশাপাশি থাকার ধাপ গুলি হলঃ
১,৩,৬,১০,১৫,২১,২৮,৩৬,৪৫..................।
এই ধারাতি ভেঙ্গে নিখলে পাওয়া যায়ঃ
ধারাটিঃ ১,৩,৬,১০,১৫,২১,২৮,৩৬,৪৫..................।
পাশাপাশি দুটি সংখ্যার বিয়গফলঃ২,৩,৪,৫,৬,৭,৮,৯........................।
এবার, ধারাটি এবং উদারহন টি খেয়াল করিঃ
ধাপ ১ঃ বামের b টি n-1 এ থাকে
ধাপ ২,৩ঃ বামের b টি n-2 এ থাকে
ধাপ ৪,৫,৬ঃ বামের b টি n-3 এ থাকে
ধাপ ৭,৮,৯,১০ঃ বামের b টি n-4 এ থাকে
ধাপ ১১,১২,১৩,১৪,১৫ঃ বামের b টি n-৫ এ থাকে
অর্থাৎ, দুটি সংখ্যার মধ্যকার সংখ্যা এবং ডানের সংখ্যাটির b (বামের b) টির অবস্থান একই।
#include <bits/stdc++.h>
using namespace std;
#define forn(i, n) for (int i = 0; i < int(n); i++)
int main() {
int t;
cin >> t;
forn(tt, t) {
int n, k;
cin >> n >> k;
string s(n, 'a');
for (int i = n - 2; i >= 0; i--) {
//cout<<"kii="<<k<<" "<<n - i - 1<<endl;
if (k <= (n - i - 1)) {
s[i] = 'b';
s[n - k] = 'b';
//cout<<"gv=="<<i<<" "<<n-k<<endl;
cout << s << endl;
break;
}
//cout<<"kii="<<k<<" "<<n - i - 1<<endl;
//cout<<"k="<<k<<endl;
k -= (n - i - 1);
}
}
}
using namespace std;
#define forn(i, n) for (int i = 0; i < int(n); i++)
int main() {
int t;
cin >> t;
forn(tt, t) {
int n, k;
cin >> n >> k;
string s(n, 'a');
for (int i = n - 2; i >= 0; i--) {
//cout<<"kii="<<k<<" "<<n - i - 1<<endl;
if (k <= (n - i - 1)) {
s[i] = 'b';
s[n - k] = 'b';
//cout<<"gv=="<<i<<" "<<n-k<<endl;
cout << s << endl;
break;
}
//cout<<"kii="<<k<<" "<<n - i - 1<<endl;
//cout<<"k="<<k<<endl;
k -= (n - i - 1);
}
}
}
মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন