Submission #00338
ソースコード
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 | #include <iostream> #include <algorithm> #define int long long using namespace std; int powmod( int a, int n, int mod) { if (n == 0) return 1; if (n % 2 == 0) return powmod((a * a) % mod, n / 2, mod); return (a * powmod(a, n - 1, mod)) % mod; } int mod = 1000000007; int n; int numCnt[10], minLength[10], minObjCnt[10]; int objCnt[10]; int fact[100001]; signed main() { int i; cin >> n; fact[0] = 1; for (i = 1; i <= n; i++) fact[i] = (fact[i - 1] * i) % mod; for (i = 0; i < 10; i++) minLength[i] = 1145141919; for (i = 0; i < n; i++) { int a, b; cin >> a >> b; objCnt[a]++; numCnt[a] += b; if (minLength[a] > b) { minLength[a] = b; minObjCnt[a] = 1; } else if (minLength[a] == b) { minObjCnt[a]++; } } for (i = 1; i < 10; i++) { if (objCnt[i] != 0) { break ; } } i %= 10; //数字iを先頭に置く numCnt[i] -= minLength[i]; objCnt[i]--; //最小コスト(シフトして足して引く, あの等比数列の公式を使うとか使わないとか) int x, ans = 0, length = 0; for ( int j = 9; j >= 0; j--) { x = ((powmod(10, numCnt[j], mod) + mod - 1) * powmod(9, mod - 2, mod)) % mod; x = (j * x) % mod; x = (x * powmod(10, length, mod)) % mod; ans = (ans + x) % mod; length += numCnt[j]; } x = ((powmod(10, minLength[i], mod) + mod - 1) * powmod(9, mod - 2, mod)) % mod; x = (i * x) % mod; x = (x * powmod(10, length, mod)) % mod; ans = (ans + x) % mod; // int typeNum = 0; for ( int j = 0; j < 10; j++) typeNum += (j == i || objCnt[j] > 0); if (typeNum == 1) { cout << ans << endl; cout << fact[objCnt[i] + 1] << endl; return 0; } //組み合わせの数 int permCnt = minObjCnt[i]; for (i = 0; i < 10; i++) { permCnt *= fact[objCnt[i]]; permCnt %= mod; } cout << ans << endl; cout << permCnt << endl; return 0; } |
ステータス
項目 | データ |
---|---|
問題 | 0003 - repdigit |
ユーザー名 | startcpp |
投稿日時 | 2017-07-07 22:51:05 |
言語 | C++11 |
状態 | Wrong Answer |
得点 | 0 |
ソースコード長 | 1912 Byte |
最大実行時間 | 57 ms |
最大メモリ使用量 | 1444 KB |
セット
セット | 得点 | Cases | |
---|---|---|---|
1 | ALL | 0 / 100 | * |
テストケース
ファイル名 | 状態 | 実行時間 | メモリ使用量 | # |
---|---|---|---|---|
01_sample1.in | AC | 12 ms | 480 KB |
1
|
01_sample2.in | AC | 14 ms | 448 KB |
1
|
01_sample3.in | AC | 13 ms | 552 KB |
1
|
02_handmake1.in | AC | 12 ms | 528 KB |
1
|
02_handmake2.in | AC | 11 ms | 500 KB |
1
|
02_handmake3.in | AC | 10 ms | 468 KB |
1
|
02_handmake4.in | AC | 11 ms | 440 KB |
1
|
02_handmake5.in | AC | 12 ms | 536 KB |
1
|
02_handmake6.in | AC | 13 ms | 636 KB |
1
|
02_handmake7.in | AC | 17 ms | 608 KB |
1
|
02_handmake8.in | AC | 13 ms | 580 KB |
1
|
02_handmake9.in | AC | 15 ms | 548 KB |
1
|
03_random1.in | AC | 17 ms | 512 KB |
1
|
03_random2.in | AC | 13 ms | 608 KB |
1
|
03_random3.in | AC | 16 ms | 444 KB |
1
|
03_random4.in | AC | 12 ms | 536 KB |
1
|
03_random5.in | AC | 12 ms | 508 KB |
1
|
03_random6.in | AC | 12 ms | 480 KB |
1
|
04_random1.in | AC | 10 ms | 452 KB |
1
|
04_random2.in | AC | 14 ms | 556 KB |
1
|
04_random3.in | AC | 16 ms | 528 KB |
1
|
04_random4.in | WA | 17 ms | 500 KB |
1
|
04_random5.in | WA | 14 ms | 600 KB |
1
|
04_random6.in | WA | 14 ms | 696 KB |
1
|
05_random1.in | AC | 51 ms | 1436 KB |
1
|
05_random2.in | AC | 52 ms | 1396 KB |
1
|
05_random3.in | AC | 51 ms | 1356 KB |
1
|
05_random4.in | AC | 57 ms | 1444 KB |
1
|
06_random1.in | AC | 52 ms | 1272 KB |
1
|
06_random3.in | AC | 51 ms | 1356 KB |
1
|