球球 WA on #04 #10
查看原帖
球球 WA on #04 #10
452784
CJerryR楼主2023/7/13 20:34

代码求调教

#include<bits/stdc++.h>
#define ll long long
#define ull long long
#define ld long double
#define pii pair<int, int>
#define endl '\n'
using namespace std;
const int MAXN = 1e6 + 6;
const int MOD = 1e9 + 7;
const int INF = 0x3fffffff;
const ll LLM = 0x3ffffffffffffff;
string s;
int num[11];
ull p[30];
priority_queue<ull> q;
ull solve(ull len) {
    if (len == 0)return 0;
    // cout << len << "\n";
    for (int i = 0; i <= 9; i++) {
        // cout << num[i] << ' ';
    }
    // cout << endl;
    for (int i = 0; i <= 9; i++)
        if (num[i] != 0)q.push(num[i]);
    ull now = 1;
    // cout << '#' << now << ' ';
    for (ull i = q.top() + 1; i <= len; i++) {
        now *= i;
        // cout << now << " ";
    }
    // cout << "\n";
    q.pop();
    while (q.size()) {
        now /= p[q.top()];
        q.pop();
    }
    // cout << "&" << now << "\n";
    return now;
}
ull dfs(int now) {
    if (now >= s.size())return 0;
    int len = s.size() - now - 1;
    ull ans = 0;

    for (int i = 0; i <= 9; i++) {
        if (num[i] != 0 && i < s[now] - '0') {
            num[i]--;
            ans += solve(len);
            num[i]++;
        }
    }
    num[s[now] - '0']--;
    // cout << ans << "\n";
    ans += dfs(now + 1);
    return ans;
}
signed main() {
    cin >> s;
    p[1] = 1;
    for (int i = 2; i <= 20; i++) {
        p[i] = p[i - 1] * i;
        // cout << p[i] << "\n";
    }
    // cout << "\n";
    for (char x : s)
        num[x - '0']++;
    cout << dfs(0) << endl;

    return (1 ^ 0 ^ 1);
}

蒟蒻调了好久

2023/7/13 20:34
加载中...