開啟章節選單

417 Word Index

程式碼

#include <bits/stdc++.h>
using namespace std;
// author:Jackis666
int main() {
    int dp[6][27] = {0};
    for (int i = 1; i < 27; i++) {
        dp[1][i] = dp[1][i - 1] + 1;
    }
    for (int i = 2; i < 6; i++) {
        dp[i][0] = dp[i - 1][26];
        for (int j = 1; j < 27; j++) {
            dp[i][j] = dp[i][j - 1] + dp[i - 1][26] - dp[i - 1][j];
        }
    }
    string s;
    while (cin >> s) {
        int n = s.size();
        bool ok = false;
        for (int i = 0; i < n - 1; i++) {
            if (s[i] >= s[i + 1]) {
                cout << "0\n";
                ok = true;
                break;
            }
        }
        if (ok) continue;
        int ans = 0;
        for (int i = 1; i < n; i++) {
            ans += dp[n - i][s[i] - 'a'] - dp[n - i][s[i - 1] - 'a' + 1];
        }
        ans += dp[n][s[0] - 'a'] + 1;
        cout << ans << endl;
    }
}
// author: Piau
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define fi first
#define se second
#define INF LONG_LONG_MAX / 1000
#define WA() cin.tie(0)->sync_with_stdio(0)
#define all(x) (x).begin(), (x).end()
#define int long long
#define PII pair<int, int>

map<string, int> mp;
int idx = 0;

void gen(string& now, int len) {
    if (now.size() == len) return mp[now] = ++idx, void();
    for (char c = (now.empty() ? 'a' : now.back() + 1); c <= 'z'; c++) {
        now += c;
        gen(now, len);
        now.pop_back();
    }
}

signed main() {
    WA();
    string s;
    for (int i = 1; i <= 5; i++) gen(s, i);
    while (cin >> s) cout << mp[s] << '\n';
}