Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define fi first
- #define se second
- #define pb push_back
- #define pf push_front
- #define popb pop_back
- #define popf pop_front
- #define ins insert
- #define pq priority_queue
- #define minele min_element
- #define maxele max_element
- #define lb lower_bound //first pos >= val
- #define ub upper_bound // first pos > val
- #define cnt_bit __builtin_popcount
- #define debug(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
- //#pragma GCC optimize("Ofast")
- //#pragma GCC target("avx,avx2,fma")
- using namespace std;
- mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
- typedef long long ll;
- typedef pair<ll, ll> pll;
- typedef pair<int, int> pii;
- int d4x[4] = {1, 0, -1, 0}; int d4y[4] = {0, 1, 0, -1};
- int d8x[8] = {0, 1, 1, 1, 0, -1, -1, -1};
- int d8y[8] = {1, 1, 0, -1, -1, -1, 0, 1};
- const ll oo = 1e18;
- const ll maxN = 1e6;
- /* Author : Le Ngoc Bao Anh, 10A5, LQD High School for Gifted Student */
- void maximize(int &a, int b) {
- a = max(a, b);
- }
- void minimize(int &a, int b) {
- a = min(a, b);
- }
- int res = 0;
- int a[100], cnt[100];
- void f(string s, int len, int x, int c, int k) {
- if(len > x) return;
- if(len == x) {
- do {
- res++;
- printf("%s ", s.c_str());
- if(res == k) return;
- } while(next_permutation(s.begin(), s.end()));
- cnt[c]--;
- return;
- }
- for(int i = max(1, c); i <= 26; i++) {
- if(cnt[i] < a[i]) {
- cnt[i]++;
- f(s + (char)(i + 'a' - 1), len + 1, x, i, k);
- if(res == k) return;
- }
- }
- cnt[c]--;
- }
- void f1(string s, int len, int x, int c, int k) {
- if(len > x) return;
- if(len == x) {
- do {
- res++;
- if(res == k) return;
- } while(next_permutation(s.begin(), s.end()));
- cnt[c]--;
- return;
- }
- for(int i = max(1, c); i <= 26; i++) {
- if(cnt[i] < a[i]) {
- cnt[i]++;
- f1(s + (char)(i + 'a' - 1), len + 1, x, i, k);
- if(res == k) return;
- }
- }
- cnt[c]--;
- }
- void solve(int x, int y, int k, int id) {
- bool okk = true;
- for(int i = 1; i <= 26; i++) {
- scanf("%d", &a[i]), a[i] = min(a[i], y);
- if(a[i] < 0) {
- okk = false;
- }
- }
- if(!okk) {
- printf("NO\n");
- return;
- }
- for(int i = 1; i <= 26; i++) cnt[i] = 0;
- res = 0;
- for(int i = x; i <= y; i++) {
- string s = "";
- if(res == k) break;
- f1(s, 0, i, 0, k);
- for(int j = 1; j <= 26; j++) cnt[j] = 0;
- if(res == k) break;
- }
- if(res < k) {
- printf("NO\n");
- return;
- } else {
- printf("YES\n");
- }
- for(int i = 1; i <= 26; i++) cnt[i] = 0;
- res = 0;
- for(int i = x; i <= y; i++) {
- string s = "";
- f(s, 0, i, 0, k);
- for(int j = 1; j <= 26; j++) cnt[j] = 0;
- if(res == k) break;
- }
- printf("\n");
- }
- int main()
- {
- ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #else
- //online
- freopen("string.inp", "r", stdin);
- freopen("string.out", "w", stdout);
- #endif
- int tc = 1, ddd = 0;
- while(true) {
- //cout << "Case #" << ddd << ": ";
- int x = 0, y = 0, k = 0;
- scanf("%d %d %d", &x, &y, &k);
- if(!x) return 0;
- solve(x, y, k, ddd);
- ddd++;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement