Submission #00294


ソースコード

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
102
103
104
105
106
107
108
109
#include<map>
#include<set>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<string>
#include<vector>
#include<complex>
#include<cstdlib>
#include<cstring>
#include<numeric>
#include<sstream>
#include<iostream>
#include<algorithm>
#include<functional>
#define mp make_pair
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define YES() printf("YES\n")
#define NO() printf("NO\n")
using namespace std;
#define int long long
//typedef long long ll;
typedef unsigned long long ull;
typedef vector<bool> vb;
typedef vector<int> vi;
typedef vector<vb> vvb;
typedef vector<vi> vvi;
typedef pair<int,int> P;
const int INF=1e+10;
const double EPS=1e-9;
const int MOD=1000000007;
const int dx[]={1,0,-1,0},dy[]={0,-1,0,1};
int power(int x,int y){
if(y == 0) return 1;
int res = power(x * x % MOD,y / 2);
if(y & 1) res = res * x % MOD;
return res;
}
int mod_inv(int X){
int a = X, b = MOD, u = 1, v = 0;
while(b) {
int t = a / b;
a -= t * b; swap(a, b);
u -= t * v; swap(u, v);
}
if(u < 0) u += MOD;
return u;
}
int cost = 0;
void calc(int a,int b){
cost = cost * power(10,b) % MOD;
int tmp = (power(10,b) % MOD + MOD - 1) * a % MOD * mod_inv(9) % MOD;
cost = (cost + tmp) % MOD;
}
signed main(){
int n,a[100000],b[100000],mia = 11,mib = INF,ans = 1,fact[100010] = {1,1};
bool zero = false;
int app[10] = {},cnt[10] = {},same = 1;
cin >> n;
for(int i = 2;i < 100010;i++) fact[i] = fact[i - 1] * i % MOD;
for(int i = 0;i < n;i++) {
cin >> a[i] >> b[i];
if(a[i] == 0) zero = true;
if(mia == a[i] && mib == b[i]) same++;
else if(mia == a[i] && mib > b[i]){
same = 1;
mib = b[i];
}else if(mia > a[i] && a[i]){
same = 1;
mia = a[i];
mib = b[i];
}
}
if(n == 1 && a[0] == 0){
cout << 0 << endl << 1 << endl;
return 0;
}
calc(mia,mib);
bool flag = false;
vector<P> vec;
for(int i = 0;i < n;i++){
if(!flag && mia == a[i] && mib == b[i]) flag = true;
else {
app[a[i]]++;
cnt[a[i]] += b[i];
}
}
if(!zero) app[mia]++;
else ans = ans * same % MOD;
for(int i = 0;i < 10;i++){
if(cnt[i]) calc(i,cnt[i]);
ans = ans * fact[app[i]] % MOD;
}
cout << cost << endl << ans << endl;
return 0;
}

ステータス

項目 データ
問題 0003 - repdigit
ユーザー名 Hoget157
投稿日時 2017-07-07 22:32:29
言語 C++11
状態 Accepted
得点 100
ソースコード長 2396 Byte
最大実行時間 55 ms
最大メモリ使用量 3100 KB

セット

セット 得点 Cases
1 ALL 100 / 100 *

テストケース

ファイル名 状態 実行時間 メモリ使用量 #
01_sample1.in AC 11 ms 1248 KB
1
01_sample2.in AC 12 ms 1212 KB
1
01_sample3.in AC 11 ms 1168 KB
1
02_handmake1.in AC 11 ms 1252 KB
1
02_handmake2.in AC 15 ms 1340 KB
1
02_handmake3.in AC 15 ms 1432 KB
1
02_handmake4.in AC 11 ms 1264 KB
1
02_handmake5.in AC 14 ms 1228 KB
1
02_handmake6.in AC 13 ms 1316 KB
1
02_handmake7.in AC 32 ms 1400 KB
1
02_handmake8.in AC 13 ms 1356 KB
1
02_handmake9.in AC 11 ms 1316 KB
1
03_random1.in AC 12 ms 1404 KB
1
03_random2.in AC 15 ms 1488 KB
1
03_random3.in AC 14 ms 1316 KB
1
03_random4.in AC 13 ms 1284 KB
1
03_random5.in AC 15 ms 1236 KB
1
03_random6.in AC 14 ms 1316 KB
1
04_random1.in AC 15 ms 1404 KB
1
04_random2.in AC 12 ms 1360 KB
1
04_random3.in AC 19 ms 1444 KB
1
04_random4.in AC 19 ms 2812 KB
1
04_random5.in AC 16 ms 1268 KB
1
04_random6.in AC 12 ms 1348 KB
1
05_random1.in AC 55 ms 2968 KB
1
05_random2.in AC 48 ms 3032 KB
1
05_random3.in AC 51 ms 3100 KB
1
05_random4.in AC 48 ms 3040 KB
1
06_random1.in AC 55 ms 2980 KB
1
06_random3.in AC 49 ms 2920 KB
1