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;
}