結果
問題 | No.603 hel__world (2) |
ユーザー | kuwa |
提出日時 | 2017-12-03 17:10:48 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,101 bytes |
コンパイル時間 | 1,049 ms |
コンパイル使用メモリ | 107,736 KB |
実行使用メモリ | 11,316 KB |
最終ジャッジ日時 | 2024-05-06 09:06:19 |
合計ジャッジ時間 | 6,625 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 2 ms
5,376 KB |
testcase_07 | AC | 2 ms
5,376 KB |
testcase_08 | WA | - |
testcase_09 | AC | 2 ms
5,376 KB |
testcase_10 | AC | 2 ms
5,376 KB |
testcase_11 | AC | 22 ms
11,172 KB |
testcase_12 | AC | 22 ms
11,128 KB |
testcase_13 | AC | 22 ms
11,316 KB |
testcase_14 | TLE | - |
testcase_15 | -- | - |
testcase_16 | -- | - |
testcase_17 | -- | - |
testcase_18 | -- | - |
testcase_19 | -- | - |
testcase_20 | -- | - |
testcase_21 | -- | - |
testcase_22 | -- | - |
testcase_23 | -- | - |
testcase_24 | -- | - |
testcase_25 | -- | - |
testcase_26 | -- | - |
testcase_27 | -- | - |
testcase_28 | -- | - |
testcase_29 | -- | - |
testcase_30 | -- | - |
testcase_31 | -- | - |
testcase_32 | -- | - |
ソースコード
#include <algorithm> #include <bitset> #include <cassert> #include <cmath> #include <complex> #include <cstdint> #include <cstdio> #include <deque> #include <functional> #include <iomanip> #include <iostream> #include <limits> #include <map> #include <numeric> #include <queue> #include <set> #include <sstream> #include <stack> #include <tuple> #include <utility> #include <vector> using namespace std; using ll = long long; constexpr ll MOD = 1000000 + 3; struct R { ll n, k; R () {} R (ll n, ll k) : n(n), k(k) { } bool operator < (const R& o) const { bool r1 = (n + 1) * (o.n + 1 - o.k) == (o.n + 1) * (n + 1 - k); return r1 ? k < o.k : (n + 1) * (o.n + 1 - o.k) < (o.n + 1) * (n + 1 - k); } }; ll modpow(ll a, int b) { if (b == 0) return 1LL; if (b == 1) return a; if (b % 2 == 1) return a * modpow(a, b-1) % MOD; ll h = modpow(a, b/2); return h * h % MOD; } ll modinv(ll a) { return modpow(a, MOD-2); } int main() { cin.tie(0); ios::sync_with_stdio(false); ll s[26]; string T; for (int j = 0; j < 26; ++j) { cin >> s[j]; } cin >> T; int co[26]; fill(co, co+26, 0); for (const char ch : T) { ++co[ch-'a']; } for (int j = 0; j < 26; ++j) { if (co[j] > s[j]) { cout << 0 << endl; return 0; } } vector<int> cu[26]; char prev = T[0]; int count = 0; for (const char ch : T) { if (prev == ch) { ++count; } else { cu[prev-'a'].push_back(count); count = 1; } prev = ch; } cu[prev-'a'].push_back(count); ll ans = 1LL; for (int j = 0; j < 26; ++j) { priority_queue<R> pq; for (int v : cu[j]) { pq.emplace(v, v); } if (pq.empty()) continue; for (int k = 0; k < s[j] - co[j]; ++k) { R r = pq.top(); pq.pop(); ans = (ans * (r.n + 1) % MOD * modinv(r.n + 1 - r.k)) % MOD; pq.emplace(r.n+1, r.k); } } cout << ans << endl; return 0; }