Submission #21080


ソースコード

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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// 基本テンプレート
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <string>
#include <cstring>
#include <deque>
#include <list>
#include <queue>
#include <stack>
#include <vector>
#include <utility>
#include <algorithm>
#include <map>
#include <set>
#include <complex>
#include <cmath>
#include <limits>
#include <cfloat>
#include <climits>
#include <ctime>
#include <cassert>
#include <numeric>
#include <functional>
using namespace std;
#define rep(i,a,n) for(int (i)=(a); (i)<(n); (i)++)
#define repq(i,a,n) for(int (i)=(a); (i)<=(n); (i)++)
#define repr(i,a,n) for(int (i)=(a); (i)>=(n); (i)--)
#define int long long int
template<typename T> void chmax(T &a, T b) {a = max(a, b);}
template<typename T> void chmin(T &a, T b) {a = min(a, b);}
template<typename T> void chadd(T &a, T b) {a = a + b;}
typedef pair<int, int> pii;
typedef long long ll;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
constexpr ll INF = 1001001001001001LL;
constexpr ll MOD = 1000000007LL;
int N, fact[100010];
pii arms[100010];
ll mod_pow(ll x, ll n) {return (!n)?1:(mod_pow((x*x)%MOD,n/2)*((n&1)?x:1))%MOD;}
// A が B こ並んだ数
ll calc(int A, int B) {
ll x = (mod_pow(10, B) - 1 + MOD) % MOD;
(x *= A) %= MOD;
return (x * mod_pow(9, MOD-2)) % MOD;
}
signed main() {
fact[0] = 1;
rep(i,1,100010) fact[i] = fact[i-1] * i;
cin >> N;
rep(i,0,N) {
int A, B; cin >> A >> B;
arms[i] = pii(A, B);
}
sort(arms, arms + N);
int cntzero = upper_bound(arms, arms+N, pii(0, INF)) - arms;
int sum = 0;
rep(i,0,cntzero) sum += arms[i].second;
int num = 0, ans = fact[cntzero], prev = arms[cntzero].first, cnt = 0, top = 0;
if(cntzero == N) {
cout << num << endl << ans << endl;
return 0;
}
rep(i,cntzero,N) {
// printf("num = %lld, ans = %lld, prev = %lld, cnt = %lld\n", num, ans, prev, cnt);
ll pw = mod_pow(10, arms[i].second);
(num *= pw) %= MOD;
(num += calc(arms[i].first, arms[i].second)) %= MOD;
if(i == cntzero) {
ll pw = mod_pow(10, sum);
(num *= pw) %= MOD;
}
// 最初の要素とおなじやつ
if(arms[cntzero] == arms[i]) top++;
// 前の数字とおなじやつかどうか
if(prev == arms[i].first) cnt++;
else {
if(arms[i-1].first == prev) (ans *= fact[cnt-1]) %= MOD;
else (ans *= fact[cnt]) %= MOD;
cnt = 1; prev = arms[i].first;
}
}
(ans *= fact[cnt]) %= MOD;
(ans *= top) %= MOD;
cout << num << endl << ans << endl;
return 0;
}

ステータス

項目 データ
問題 0758 - repdigit
ユーザー名 tsutaj
投稿日時 2017-07-08 00:25:01
言語 C++11
状態 Wrong Answer
得点 0
ソースコード長 2739 Byte
最大実行時間 118 ms
最大メモリ使用量 3068 KB

セット

セット 得点 Cases
1 ALL 0 / 10 *

テストケース

ファイル名 状態 実行時間 メモリ使用量 #
01_sample1.in AC 14 ms 1248 KB
1
01_sample2.in AC 14 ms 1208 KB
1
01_sample3.in AC 13 ms 1296 KB
1
02_handmake1.in AC 17 ms 1252 KB
1
02_handmake2.in WA 11 ms 1208 KB
1
02_handmake3.in WA 11 ms 1288 KB
1
02_handmake4.in AC 14 ms 1244 KB
1
02_handmake5.in AC 11 ms 1204 KB
1
02_handmake6.in AC 12 ms 1292 KB
1
02_handmake7.in AC 11 ms 1384 KB
1
02_handmake8.in AC 28 ms 1340 KB
1
02_handmake9.in AC 11 ms 1428 KB
1
03_random1.in WA 13 ms 1392 KB
1
03_random2.in WA 11 ms 1348 KB
1
03_random3.in WA 14 ms 1304 KB
1
03_random4.in WA 11 ms 1384 KB
1
03_random5.in WA 14 ms 1464 KB
1
03_random6.in WA 11 ms 1416 KB
1
04_random1.in WA 14 ms 1368 KB
1
04_random2.in WA 14 ms 1448 KB
1
04_random3.in WA 14 ms 1404 KB
1
04_random4.in WA 11 ms 1360 KB
1
04_random5.in WA 10 ms 1308 KB
1
04_random6.in WA 14 ms 1264 KB
1
05_random1.in WA 111 ms 2880 KB
1
05_random2.in WA 107 ms 2944 KB
1
05_random3.in WA 111 ms 3008 KB
1
05_random4.in WA 118 ms 3068 KB
1
06_random1.in WA 60 ms 3004 KB
1
06_random3.in WA 116 ms 2936 KB
1