Submission #00056


ソースコード

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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.IO;
using System.Text;
using System.Diagnostics;
using Binary = System.Func<System.Linq.Expressions.ParameterExpression, System.Linq.Expressions.ParameterExpression, System.Linq.Expressions.BinaryExpression>;
using Unary = System.Func<System.Linq.Expressions.ParameterExpression, System.Linq.Expressions.UnaryExpression>;
class Program
{
static StreamWriter sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
static Scan sc = new Scan();
const int M = 1000000007;
const double eps = 1e-11;
static readonly int[] dd = { 0, 1, 0, -1, 0 };
static void Main()
{
int n = sc.Int;
var kaijo = new long[n + 1];
kaijo[0] = 1;
for (int i = 1; i <= n; i++)
{
kaijo[i] = kaijo[i - 1] * i % M;
}
var dic = new SortedDictionary<int, int>[10];
for (int i = 0; i < 10; i++)
{
dic[i] = new SortedDictionary<int, int>();
}
for (int i = 0; i < n; i++)
{
int a, b;
sc.Multi(out a, out b);
if (dic[a].ContainsKey(b))
++dic[a][b];
else
dic[a].Add(b, 1);
}
long ans = 0, cnt = 1;
int fir = -1, firk = 0;
for (int i = 1; i < 10; i++)
{
if (dic[i].Count > 0)
{
fir = i;
foreach (var item in dic[i])
{
cnt *= item.Value;
firk = item.Key;
ans = op(firk) * i % M;
break;
}
break;
}
}
for (int i = 0; i < 10; i++)
{
long keta = 0;
int cc = 0;
foreach (var item in dic[i])
{
keta += item.Key * (long)item.Value;
cc += item.Value;
}
if (i == fir)
{
keta -= firk;
--cc;
}
ans = (ans * mymath.pow(10, keta) % M + op(keta) * i % M) % M;
cnt = cnt * kaijo[cc] % M;
}
Prt(ans);
Prt(cnt);
sw.Flush();
}
// 111...111(n keta) % M
static long op(long a)
{
if (a == 0) return 0;
long p = op(a / 2);
if (a % 2 == 0) return (p * mymath.pow(10, a / 2) % M + p) % M;
else return (p * mymath.pow(10, a / 2) % M + p * 10 % M + 1) % M;
}
static void swap<T>(ref T a, ref T b) { var t = a; a = b; b = t; }
static T Max<T>(params T[] a) { return a.Max(); }
static T Min<T>(params T[] a) { return a.Min(); }
static void DBG(string a) { Console.WriteLine(a); }
static void DBG<T>(IEnumerable<T> a) { Console.WriteLine(string.Join(" ", a)); }
static void DBG(params object[] a) { Console.WriteLine(string.Join(" ", a)); }
static void Prt(string a) { sw.WriteLine(a); }
static void Prt<T>(IEnumerable<T> a) { sw.WriteLine(string.Join(" ", a)); }
static void Prt(params object[] a) { sw.WriteLine(string.Join(" ", a)); }
}
static class ex
{
public static void swap<T>(this IList<T> a, int i, int j) { var t = a[i]; a[i] = a[j]; a[j] = t; }
public static T[] copy<T>(this IList<T> a)
{
var ret = new T[a.Count];
for (int i = 0; i < a.Count; i++) ret[i] = a[i];
return ret;
}
}
static class Operator<T>
{
static readonly ParameterExpression x = Expression.Parameter(typeof(T), "x");
static readonly ParameterExpression y = Expression.Parameter(typeof(T), "y");
public static readonly Func<T, T, T> Add = Lambda(Expression.Add);
public static readonly Func<T, T, T> Subtract = Lambda(Expression.Subtract);
public static readonly Func<T, T, T> Multiply = Lambda(Expression.Multiply);
public static readonly Func<T, T, T> Divide = Lambda(Expression.Divide);
public static readonly Func<T, T> Plus = Lambda(Expression.UnaryPlus);
public static readonly Func<T, T> Negate = Lambda(Expression.Negate);
public static Func<T, T, T> Lambda(Binary op) { return Expression.Lambda<Func<T, T, T>>(op(x, y), x, y).Compile(); }
public static Func<T, T> Lambda(Unary op) { return Expression.Lambda<Func<T, T>>(op(x), x).Compile(); }
}
class Scan
{
public int Int { get { return int.Parse(Str); } }
public long Long { get { return long.Parse(Str); } }
public double Double { get { return double.Parse(Str); } }
public string Str { get { return Console.ReadLine().Trim(); } }
public int[] IntArr { get { return StrArr.Select(int.Parse).ToArray(); } }
public long[] LongArr { get { return StrArr.Select(long.Parse).ToArray(); } }
public double[] DoubleArr { get { return StrArr.Select(double.Parse).ToArray(); } }
public string[] StrArr { get { return Str.Split(); } }
bool eq<T, U>() { return typeof(T).Equals(typeof(U)); }
T ct<T, U>(U a) { return (T)Convert.ChangeType(a, typeof(T)); }
T cv<T>(string s) { return eq<T, int>() ? ct<T, int>(int.Parse(s))
: eq<T, long>() ? ct<T, long>(long.Parse(s))
: eq<T, double>() ? ct<T, double>(double.Parse(s))
: eq<T, char>() ? ct<T, char>(s[0])
: ct<T, string>(s); }
public void Multi<T>(out T a) { a = cv<T>(Str); }
public void Multi<T, U>(out T a, out U b)
{ var ar = StrArr; a = cv<T>(ar[0]); b = cv<U>(ar[1]); }
public void Multi<T, U, V>(out T a, out U b, out V c)
{ var ar = StrArr; a = cv<T>(ar[0]); b = cv<U>(ar[1]); c = cv<V>(ar[2]); }
public void Multi<T, U, V, W>(out T a, out U b, out V c, out W d)
{ var ar = StrArr; a = cv<T>(ar[0]); b = cv<U>(ar[1]); c = cv<V>(ar[2]); d = cv<W>(ar[3]); }
public void Multi<T, U, V, W, X>(out T a, out U b, out V c, out W d, out X e)
{ var ar = StrArr; a = cv<T>(ar[0]); b = cv<U>(ar[1]); c = cv<V>(ar[2]); d = cv<W>(ar[3]); e = cv<X>(ar[4]); }
public void Multi<T, U, V, W, X, Y>(out T a, out U b, out V c, out W d, out X e, out Y f)
{ var ar = StrArr; a = cv<T>(ar[0]); b = cv<U>(ar[1]); c = cv<V>(ar[2]); d = cv<W>(ar[3]); e = cv<X>(ar[4]); f = cv<Y>(ar[5]); }
public void Multi<T, U, V, W, X, Y, Z>(out T a, out U b, out V c, out W d, out X e, out Y f, out Z g)
{ var ar = StrArr; a = cv<T>(ar[0]); b = cv<U>(ar[1]); c = cv<V>(ar[2]); d = cv<W>(ar[3]); e = cv<X>(ar[4]); f = cv<Y>(ar[5]); g = cv<Z>(ar[6]);}
}
class mymath
{
public static long Mod = 1000000007;
public static bool isprime(long a)
{
if (a < 2) return false;
for (long i = 2; i * i <= a; i++) if (a % i == 0) return false;
return true;
}
public static bool[] sieve(int n)
{
var p = new bool[n + 1];
for (int i = 2; i <= n; i++) p[i] = true;
for (int i = 2; i * i <= n; i++) if (p[i]) for (int j = i * i; j <= n; j += i) p[j] = false;
return p;
}
public static List<int> getprimes(int n)
{
var prs = new List<int>();
var p = sieve(n);
for (int i = 2; i <= n; i++) if (p[i]) prs.Add(i);
return prs;
}
public static long[][] E(int n)
{
var ret = new long[n][];
for (int i = 0; i < n; i++) { ret[i] = new long[n]; ret[i][i] = 1; }
return ret;
}
public static long[][] pow(long[][] A, long n)
{
if (n == 0) return E(A.Length);
var t = pow(A, n / 2);
if ((n & 1) == 0) return mul(t, t);
return mul(mul(t, t), A);
}
public static double dot(double[] x, double[] y)
{
int n = x.Length;
double ret = 0;
for (int i = 0; i < n; i++) ret += x[i] * y[i];
return ret;
}
public static long dot(long[] x, long[] y)
{
int n = x.Length;
long ret = 0;
for (int i = 0; i < n; i++) ret = (ret + x[i] * y[i]) % Mod;
return ret;
}
public static T[][] trans<T>(T[][] A)
{
int n = A[0].Length, m = A.Length;
var ret = new T[n][];
for (int i = 0; i < n; i++) { ret[i] = new T[m]; for (int j = 0; j < m; j++) ret[i][j] = A[j][i]; }
return ret;
}
public static double[] mul(double[][] A, double[] x)
{
int n = A.Length;
var ret = new double[n];
for (int i = 0; i < n; i++) ret[i] = dot(x, A[i]);
return ret;
}
public static long[] mul(long[][] A, long[] x)
{
int n = A.Length;
var ret = new long[n];
for (int i = 0; i < n; i++) ret[i] = dot(x, A[i]);
return ret;
}
public static long[][] mul(long[][] A, long[][] B)
{
int n = A.Length;
var Bt = trans(B);
var ret = new long[n][];
for (int i = 0; i < n; i++) ret[i] = mul(Bt, A[i]);
return ret;
}
public static long[] add(long[] x, long[] y)
{
int n = x.Length;
var ret = new long[n];
for (int i = 0; i < n; i++) ret[i] = (x[i] + y[i]) % Mod;
return ret;
}
public static long[][] add(long[][] A, long[][] B)
{
int n = A.Length;
var ret = new long[n][];
for (int i = 0; i < n; i++) ret[i] = add(A[i], B[i]);
return ret;
}
public static long pow(long a, long b)
{
if (a >= Mod) return pow(a % Mod, b);
if (a == 0) return 0;
if (b == 0) return 1;
var t = pow(a, b / 2);
if ((b & 1) == 0) return t * t % Mod;
return t * t % Mod * a % Mod;
}
public static long inv(long a) { return pow(a, Mod - 2); }
public static long gcd(long a, long b)
{
while (b > 0) { var t = a % b; a = b; b = t; }
return a;
}
// a x + b y = gcd(a, b)
public static long extgcd(long a, long b, out long x, out long y)
{
long g = a; x = 1; y = 0;
if (b > 0) { g = extgcd(b, a % b, out y, out x); y -= a / b * x; }
return g;
}
public static long lcm(long a, long b) { return a / gcd(a, b) * b; }
public static long comb(int n, int r)
{
if (n < 0 || r < 0 || r > n) return 0;
if (n - r < r) r = n - r;
if (r == 0) return 1;
if (r == 1) return n;
int[] numer = new int[r], denom = new int[r];
for (int k = 0; k < r; k++) { numer[k] = n - r + k + 1; denom[k] = k + 1; }
for (int p = 2; p <= r; p++)
{
int piv = denom[p - 1];
if (piv > 1)
{
int ofst = (n - r) % p;
for (int k = p - 1; k < r; k += p) { numer[k - ofst] /= piv; denom[k] /= piv; }
}
}
long ret = 1;
for (int k = 0; k < r; k++) if (numer[k] > 1) ret = ret * numer[k] % Mod;
return ret;
}
}

ステータス

項目 データ
問題 0003 - repdigit
ユーザー名 rian
投稿日時 2017-07-07 20:37:49
言語 C#
状態 Wrong Answer
得点 0
ソースコード長 11153 Byte
最大実行時間 292 ms
最大メモリ使用量 26444 KB

セット

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

テストケース

ファイル名 状態 実行時間 メモリ使用量 #
01_sample1.in WA 89 ms 9720 KB
1
01_sample2.in AC 64 ms 11872 KB
1
01_sample3.in AC 50 ms 11804 KB
1
02_handmake1.in AC 42 ms 9892 KB
1
02_handmake2.in WA 45 ms 11784 KB
1
02_handmake3.in WA 46 ms 9704 KB
1
02_handmake4.in AC 42 ms 11884 KB
1
02_handmake5.in AC 42 ms 9932 KB
1
02_handmake6.in WA 42 ms 9944 KB
1
02_handmake7.in WA 47 ms 11832 KB
1
02_handmake8.in WA 43 ms 9760 KB
1
02_handmake9.in AC 44 ms 7804 KB
1
03_random1.in WA 44 ms 9948 KB
1
03_random2.in WA 65 ms 9920 KB
1
03_random3.in WA 48 ms 11928 KB
1
03_random4.in WA 53 ms 7840 KB
1
03_random5.in WA 44 ms 12020 KB
1
03_random6.in WA 55 ms 9932 KB
1
04_random1.in WA 45 ms 10028 KB
1
04_random2.in WA 54 ms 10000 KB
1
04_random3.in WA 42 ms 9816 KB
1
04_random4.in WA 42 ms 11956 KB
1
04_random5.in WA 45 ms 9872 KB
1
04_random6.in WA 44 ms 12016 KB
1
05_random1.in WA 242 ms 20436 KB
1
05_random2.in WA 166 ms 21708 KB
1
05_random3.in WA 167 ms 24840 KB
1
05_random4.in WA 180 ms 23984 KB
1
06_random1.in WA 193 ms 25212 KB
1
06_random3.in WA 292 ms 26444 KB
1