Cerința
Mygo este un bun informatician, însă nu se prea descurcă la probleme de matematică. Șcuțu, bunul său prieten, s-a decis să-l ajute, și îi propune următoarea problemă: “Dându-se un vector A
cu 10
componente numere naturale, se întreabă câte numere distincte cu ∑i=09A[i] cifre există astfel încât să conțină exact A[0]
cifre de 0
, A[1]
cifre de 1
, … A[9]
cifre de 9
?”. Mygo a promis că va rezolva această problemă, însă va da rezultatul modulo 666013
.
Date de intrare
Fișierul de intrare mygo.in
conține pe prima linie 10
numere naturale, reprezentând elementele vectorului A
.
Date de ieșire
Fișierul de ieșire mygo.out
va conține pe prima linie numărul S
, reprezentând răspunsul dat de Mygo.
Restricții și precizări
1 ≤
∑i=09A[i]≤ 1000
Exemplu
mygo.in
0 2 2 0 0 0 0 0 0 0
mygo.out
6
Explicație
Cele 6
numere sunt:
1122
1212
1221
2211
2121
2112
#include <bits/stdc++.h> using namespace std; ifstream cin("mygo.in"); ofstream cout("mygo.out"); int A[11]; const int mod = 666013; int fact(int n){ int r = 1; for(int i = 1; i <= n; ++i) r = 1LL * r * i % mod; return r; } int imod(int a){ int n = mod - 2; int r = 1; while(n > 0){ if(n % 2 == 1) r = 1LL * r * a % mod; a = 1ll * a * a % mod; n/=2; } return r; } int main(){ int p = -1; for(int i = 0; i < 10; ++i) cin >> A[i], p += A[i]; int s = 0; for(int k = 1; k < 10; ++k) if(A[k] > 0){ A[k]--; int Q = 1; for(int i = 0; i <= 9; ++i) Q = 1LL * Q * fact(A[i]) % mod; s = (s + 1LL * fact(p) * imod(Q) % mod) % mod; A[k] ++; } cout << s; return 0; }