Submission #00242
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #include <array> #include <cassert> #include <cstdio> #include <tuple> #include <vector> #define repeat(i, n) for (int i = 0; (i) < int(n); ++(i)) #define repeat_from(i, m, n) for (int i = (m); (i) < int(n); ++(i)) using ll = long long ; using namespace std; template < int mod> int fact( int n) { static vector< int > memo(1, 1); if (memo.size() <= n) { int l = memo.size(); memo.resize(n+1); repeat_from (i, l, n+1) memo[i] = memo[i-1] *(ll) i % mod; } return memo[n]; } ll powmod(ll x, ll y, ll p) { // O(log y) assert (0 <= x and x < p); assert (0 <= y); ll z = 1; for (ll i = 1; i <= y; i <<= 1) { if (y & i) z = z * x % p; x = x * x % p; } return z; } int repunit(ll n, int mod) { // O(log n) ll y = 0; ll x = 1; for (ll i = 1; i <= n; i <<= 1) { if (n & i) y = (y * powmod(10, i, mod) % mod + x) % mod; x = (x * powmod(10, i, mod) % mod + x) % mod; } return y; } constexpr int mod = 1e9+7; pair< int , int > solve( int n, vector< int > const & a, vector< int > const & b) { array< int , 10> cnt = {}; array< int , 10> acc = {}; repeat (i, n) { cnt[a[i]] += 1; acc[a[i]] += b[i]; } int x = 0; int y = 1; if (cnt[0]) { if (n == 1) return make_pair(0, 1); int d = 1; while (not cnt[d]) ++ d; assert (d <= 9); int min_length = mod; int min_length_count = 0; repeat (i, n) { if (a[i] == d and b[i] <= min_length) { if (b[i] < min_length) { min_length = b[i]; min_length_count = 0; } min_length_count += 1; } } x = (x *(ll) powmod(10, min_length, mod) + repunit(min_length, mod) *(ll) d % mod) % mod; y = y *(ll) min_length_count % mod; cnt[d] -= 1; acc[d] -= min_length; } repeat (d, 10) { x = (x *(ll) powmod(10, acc[d], mod) + repunit(acc[d], mod) *(ll) d % mod) % mod; y = y *(ll) fact<mod>(cnt[d]) % mod; } return make_pair(x, y); } int main() { int n; scanf ( "%d" , &n); vector< int > a(n), b(n); repeat (i, n) scanf ( "%d%d" , &a[i], &b[i]); int x, y; tie(x, y) = solve(n, a, b); printf ( "%d\n" , x); printf ( "%d\n" , y); return 0; } |
ステータス
項目 | データ |
---|---|
問題 | 0003 - repdigit |
ユーザー名 | kimiyuki |
投稿日時 | 2017-07-07 22:06:26 |
言語 | C++17 |
状態 | Runtime Error |
得点 | 0 |
ソースコード長 | 2427 Byte |
最大実行時間 | 147 ms |
最大メモリ使用量 | 1452 KB |
セット
セット | 得点 | Cases | |
---|---|---|---|
1 | ALL | 0 / 100 | * |
テストケース
ファイル名 | 状態 | 実行時間 | メモリ使用量 | # |
---|---|---|---|---|
01_sample1.in | AC | 19 ms | 480 KB |
1
|
01_sample2.in | AC | 11 ms | 456 KB |
1
|
01_sample3.in | AC | 14 ms | 564 KB |
1
|
02_handmake1.in | AC | 13 ms | 544 KB |
1
|
02_handmake2.in | AC | 13 ms | 524 KB |
1
|
02_handmake3.in | AC | 12 ms | 632 KB |
1
|
02_handmake4.in | AC | 14 ms | 612 KB |
1
|
02_handmake5.in | AC | 10 ms | 592 KB |
1
|
02_handmake6.in | AC | 16 ms | 572 KB |
1
|
02_handmake7.in | AC | 9 ms | 552 KB |
1
|
02_handmake8.in | AC | 13 ms | 532 KB |
1
|
02_handmake9.in | AC | 16 ms | 512 KB |
1
|
03_random1.in | AC | 12 ms | 492 KB |
1
|
03_random2.in | AC | 11 ms | 472 KB |
1
|
03_random3.in | AC | 12 ms | 448 KB |
1
|
03_random4.in | AC | 12 ms | 432 KB |
1
|
03_random5.in | AC | 12 ms | 536 KB |
1
|
03_random6.in | AC | 14 ms | 520 KB |
1
|
04_random1.in | AC | 21 ms | 504 KB |
1
|
04_random2.in | AC | 12 ms | 608 KB |
1
|
04_random3.in | AC | 11 ms | 588 KB |
1
|
04_random4.in | AC | 10 ms | 564 KB |
1
|
04_random5.in | AC | 10 ms | 536 KB |
1
|
04_random6.in | AC | 13 ms | 520 KB |
1
|
05_random1.in | RE | 147 ms | 1264 KB |
1
|
05_random2.in | RE | 38 ms | 1224 KB |
1
|
05_random3.in | RE | 30 ms | 1316 KB |
1
|
05_random4.in | RE | 36 ms | 1364 KB |
1
|
06_random1.in | RE | 27 ms | 1452 KB |
1
|
06_random3.in | WA | 21 ms | 1416 KB |
1
|