3732. 纸条

Deuchie

这道水题在上次月赛(2019.11)出现过(~~但架不住我是个菜鸡呀~~),今天不想去洛谷了来换换口味,竟然又遇到了它,算是有缘叭,毕竟当时没做出来,后来也没改。

题意要求字典序,所以首先要把每一个 ‘#‘ 按字母表排序。然后这个经过思考,可以发现求相应的字母这个问题等价于「求一个十进制数的 m 位 k 进制表示」(~~所以就是一道进制转换Orz~~)。

出题人没有开高数度,应该是放水了。

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, m, k;
    unsigned long long x;
    string text;
    cin >> n >> m >> k >> x >> text;
    vector<string> dict(m);
    for (int i = 0; i < m; ++i) {
        cin >> dict[i];
        sort(dict[i].begin(), dict[i].end());
    }
    vector<char> index(m);
    --x;  // 注意 x 给的是「第几个」数,所以实际上的数字是 x - 1。
    for (auto i = index.rbegin(); i != index.rend(); ++i) {
        *i = x % k;
        x /= k;
    }
    for (int i = 0, cnt = 0; cnt < m; ++i) {
        if (text[i] == '#') {
            text[i] = dict[cnt][index[cnt]];
            ++cnt;
        }
    }
    cout << text << '\n';
}
Deuchie

另外这 Markdown 怎么鬼畜了,我的删除线被吃了

Deuchie

才发现我没有 #include <string>,我发现了什么?这说明 string 可能已经被什么别的文件包含了。

你当前正在回复 博客/题目
存在问题!