Submission

Status:

PPPPPPPPPPPPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: angpangSK

Problemset: สุ่มสลับ

Language: cpp

Time: 0.002 second

Submitted On: 2025-09-24 20:16:35

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

int main() {
    int N;
    cin >> N;
    string s;
    cin >> s;

    vector<char> chars;
    for (int i = 0; i < N; i++) {
        chars.push_back('A' + i);
    }

    int rank = 1;
    vector<bool> used(N, false);

    for (int i = 0; i < N; i++) {
        int idx = find(chars.begin(), chars.end(), s[i]) - chars.begin();
        int count_smaller_unused = 0;
        for (int j = 0; j < idx; j++) {
            if (!used[j]) count_smaller_unused++;
        }
        int fact = 1;
        for (int k = 1; k <= N - i - 1; k++) fact *= k;

        rank += count_smaller_unused * fact;
        used[idx] = true;
    }

    cout << rank << endl;
    return 0;
}