æ¡DPã¨ã¯éããã©ãæ¡DPçãªçºæ³ã§è§£ãã
åé¡æ¦è¦
é·ã ã®æåå
ãä¸ããããã
ã®åæåã並ã³æ¿ãã¦ã§ããæååããã¹ã¦èããã¨ãã
ã¯ãã®ä¸ã§è¾æ¸é ã§ä½çªç®ã®æååã«ç¸å½ããã®ããæ±ããã
å¶ç´
ã®æåã¯ãã¹ã¦è±å¤§æå
èãããã¨
ãããè¾æ¸é ã§å°ããæååã®åæ°ãæ°ãä¸ãã¦ãæå¾ã« 1 ã足ãã° OKã
ãããè¾æ¸é ã®å°ããæååã¯ã以ä¸ã®ããã«æãããã¨ãã§ããã
- æåã®
æåã¯
ã¨ä¸è´ãã
æåç®ã
ãããå°ãã (0-indexed)
- ãã以éã¯èªç±ã«ä¸¦ã³æ¿ãã¦è¯ã
ã«ã¤ãã¦å ´ååããã¦ãä¸å¯§ã«æ°ãä¸ãããããªãããã¨ãã°
- 'A' ã
æå
- 'B' ã
æå
- 'C' ã
æå
ã§ãããããªæååã並ã³æ¿ãã¦ã§ããæååã®åæ°ã¯
å
ã¨ãªããããã§ã¯ 3 種é¡ã®æåã®ã¿ãèãããã26 種é¡ã«ãªã£ã¦ãåæ§ã«ã§ããã ãå°ããã®ã§ãããããã
ãåå¦çã§æ±ãã¦ããã¨æ¥½ã
ã³ã¼ã
#include <bits/stdc++.h> using namespace std; int main() { string S; cin >> S; int N = S.size(); vector<long long> fac(N+1, 1); for (int n = 1; n <= N; ++n) fac[n] = fac[n-1] * n; auto com = [&](int sum, const vector<int> &num) -> long long { long long res = fac[sum]; for (int i = 0; i < 26; ++i) res /= fac[num[i]]; return res; }; vector<int> num(26, 0); for (int i = 0; i < N; ++i) num[S[i]-'A']++; long long res = 0; for (int i = 0; i < N; ++i) { for (int c = 0; c < S[i]-'A'; ++c) { if (!num[c]) continue; num[c]--; res += com(N-i-1, num); num[c]++; } num[S[i]-'A']--; } cout << res+1 << endl; }