結果
| 問題 | No.171 スワップ文字列(Med) | 
| コンテスト | |
| ユーザー |  nanasili | 
| 提出日時 | 2015-04-08 09:23:06 | 
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 6 ms / 1,000 ms | 
| コード長 | 1,085 bytes | 
| コンパイル時間 | 616 ms | 
| コンパイル使用メモリ | 83,644 KB | 
| 実行使用メモリ | 7,424 KB | 
| 最終ジャッジ日時 | 2024-07-04 11:00:44 | 
| 合計ジャッジ時間 | 1,288 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 10 | 
ソースコード
#include <algorithm>
#include <vector>
#include <cfloat>
#include <string>
#include <cmath>
#include <set>
#include <cstdlib>
#include <map>
#include <ctime>
#include <iomanip>
#include <functional>
#include <deque>
#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
#include <stack>
#include <climits>
#include <sys/time.h>
#include <cctype>
using namespace std;
typedef long long ll;
#define MODN 573
int main() {
  string str;
  cin >> str;
  int alnum['z'-'a'+1];
  memset(alnum, 0, sizeof(alnum));
  for (int i = 0; i < str.size(); i++) {
    alnum[str[i]-'A']++;
  }
  int com[1001][1001];
  memset(com, 0, sizeof(com));
  for (int i = 0; i <= 1000; i++) {
    for (int j = 0; j <= i; j++) {
      if (j == 0 || j == i) {
	com[i][j] = 1;
      }else {
	com[i][j] = (com[i-1][j-1]+com[i-1][j])%MODN;
      }
    }
  }
  int ans = 1;
  int n = str.size();
  for (int i = 0; i < 'z'-'a'+1; i++) {
    if (alnum[i] == 0) {
      continue;
    }
    ans = (com[n][alnum[i]]*ans)%MODN;
    n -= alnum[i];
  }
  std::cout << (ans+MODN-1)%MODN << std::endl;
}
            
            
            
        