Diccionario de Xiaoyi - Niuke.com - Preguntas de la entrevista

Descripción del Título

Xiao Yi aprendió sobre la teoría de cuerdas en la escuela, por lo que completó un proyecto de diccionario basado en esto.

El diccionario de Xiaoyi es muy peculiar, cada palabra del diccionario contiene n'a 'y m'z', y todas las palabras están ordenadas en orden lexicográfico.

Xiao Yi ahora espera que puedas ayudarlo a descubrir cuál es la palabra k-ésima.

Ingrese descripción:

 

La entrada consta de una línea de tres números enteros n, m, k (1 <= n, m <= 100, 1 <= k <= 109), separados por espacios.

Descripción de salida:

Imprima la cadena en el diccionario kth, si no hay solución, envíe -1.

Ejemplo 1

ingresar

 

2 2 6

Producción

 

zzaa

Descripción

Las cadenas en el diccionario son aazz azaz azza zaaz zaza zzaa

 

Código de referencia:

#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
    void solve(int n, int m, long long k) {
        vector<char> x;//
        while (n && m) {
            //每次迭代问题规模缩减一个单位
            排列组合:假设当前序列首字符为a,剩下n-1个a放在剩下n - 1 +m 个位置共有的可能数
            long long count = 1;
            for (int i = 0; i < n - 1; i++) {//求组合数
                count *= n - 1 + m - i;
                count /= (i + 1);
                if (count > k)break;//防止越界。count>k就可以退出计算了
            }
            if (k <= count) {//如果k小于等于count,则表明首字符的确应为a
                x.push_back('a');
                n--;//问题缩减为 n-1个a和m个z 中找第k大
            }
            else {
                x.push_back('z');
                m--;//问题缩减为 n-1个a和m个z 中找第k-count大
                k -= count;
            }
        }
        //循环结束后,剩余子序列只存在"aa..aaa" 或 "zz..zzz"1种情况
        if (k != 1) {//
            cout << -1;
            return;
        }
        while (n--)x.push_back('a');
        while (m--)x.push_back('z');
        for (int i = 0; i < x.size(); i++) {
            cout << x[i];
        }
    }
};
int main() {
    Solution a;
    int n, m;
    long long k;
    while (cin >> n >> m >> k) {
        a.solve(n, m, k);
    }
    return 0;
}

 

Supongo que te gusta

Origin blog.csdn.net/qq_40513792/article/details/104287962
Recomendado
Clasificación