Submission

Status:

-PP---P----PP-P-----

Subtask/Task Score:

30/100

Score: 30

User: anonymous

Problemset: สุ่มสลับ

Language: cpp

Time: 0.004 second

Submitted On: 2026-10-01 16:35:52

#include <bits/stdc++.h>

using namespace std;

long long factorial(int n) {
    long long fact = 1;
    for (int i = 1; i <= n; i++) {
        fact *= i;
    }
    return fact;
}

int main()
{
	int n;
    cin >> n;

    string s;
    cin >> s;
    vector<char> available;
    for (int i = 0; i < n; i++) {
        available.push_back('A' + i);
    }

    long long rank = 1;
    for (int i = 0; i < n; i++) {
        char cur_char = s[i];

        int count_smaller = 0;
        int found = -1;

        for (int j = 0; j < available.size(); j++) {
            if (available[j] < cur_char) {
                count_smaller++;
            } else if (available[j] == cur_char) {
                found = j;
                break;
            }
        }

        rank += count_smaller * factorial(n - 1 - i);


    }

    cout << rank << "\n";

    return 0;
}