Submission details
Task:Contests
Sender:quasisphere
Submission time:2015-10-07 16:45:09 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.06 sdetails
#2ACCEPTED0.05 sdetails
#3ACCEPTED0.06 sdetails
#4ACCEPTED0.05 sdetails
#5ACCEPTED0.05 sdetails
#6ACCEPTED0.05 sdetails
#7ACCEPTED0.06 sdetails
#8ACCEPTED0.05 sdetails
#9ACCEPTED0.06 sdetails
#10ACCEPTED0.07 sdetails
#11ACCEPTED0.05 sdetails
#12ACCEPTED0.05 sdetails
#13ACCEPTED0.06 sdetails
#14ACCEPTED0.06 sdetails
#15ACCEPTED0.06 sdetails
#16ACCEPTED0.06 sdetails
#17ACCEPTED0.05 sdetails
#18ACCEPTED0.06 sdetails
#19ACCEPTED0.05 sdetails
#20ACCEPTED0.05 sdetails

Code

#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
#include<utility>

using namespace std;

const int64_t MOD=1000000007;

int64_t power_mod(int64_t a, int64_t k, int64_t m) {
  if(k == 0) return 1;
  int64_t res=power_mod(a, k/2, m);
  if(k%2 == 0) return res*res%m;
  return a*res%m*res%m;
}

int64_t binomial(int64_t m, int64_t n) {
  int64_t prod=1;
  for(int64_t i=m-n+1;i<=m;i++) {
    prod*=i;
    prod%=MOD;
  }
  for(int64_t i=1;i<=n;i++) {
    prod*=power_mod(i,MOD-2,MOD);
    prod%=MOD;
  }
  return prod;
}

int main(void) {
  int64_t n,s;
  cin >> n >> s;
  int64_t empties=0;
  for(int64_t i=0;i<n;i++) {
    string st;
    cin >> st;
    if(st.size() == 1) {
      if(st[0] == '?') {
        empties++;
      } else {
        int64_t foo=st[0]-'0';
        s-=foo;
      }
    } else {
      int64_t foo=10*(st[0]-'0') + st[1]-'0';
      s-=foo;
    }
  }
  int64_t total=0;
  for(int64_t m=0;11*m<=s;m++) {
    int64_t u=s - 11*m;
    int64_t blah=binomial(u+empties-1,empties-1)*binomial(empties, m)%MOD;
    if(m%2) total-=blah;
    else total+=blah;
    total%=MOD;
  }
  if(total < 0) total+=MOD;
  cout << total << endl;
  return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
100 722
10 ? 8 ? 8 5 1 3 ? 2 5 3 1 ? ?...

correct output
55143150

user output
55143150

Test 2

Verdict: ACCEPTED

input
100 741
1 6 ? 7 2 ? 5 1 2 3 10 ? ? 5 4...

correct output
598236954

user output
598236954

Test 3

Verdict: ACCEPTED

input
25 83
? 5 4 7 9 ? 3 ? ? 4 3 5 ? ? ? ...

correct output
77504288

user output
77504288

Test 4

Verdict: ACCEPTED

input
100 729
8 5 5 2 9 ? 2 ? ? 1 5 ? ? 9 ? ...

correct output
579081161

user output
579081161

Test 5

Verdict: ACCEPTED

input
3 11
7 ? ? 

correct output
5

user output
5

Test 6

Verdict: ACCEPTED

input
100 423
? ? ? ? ? 3 ? 6 ? 2 ? ? 9 1 5 ...

correct output
73043117

user output
73043117

Test 7

Verdict: ACCEPTED

input
100 706
3 ? 9 ? ? ? ? ? ? 9 ? 1 ? 1 5 ...

correct output
169594458

user output
169594458

Test 8

Verdict: ACCEPTED

input
100 719
10 ? 2 ? 8 ? ? 4 7 ? 1 ? ? ? ?...

correct output
371478559

user output
371478559

Test 9

Verdict: ACCEPTED

input
75 545
9 ? 9 ? 10 9 9 1 5 ? 2 ? 5 9 4...

correct output
189257897

user output
189257897

Test 10

Verdict: ACCEPTED

input
100 661
? 8 ? 8 10 ? ? 5 ? 5 10 ? ? 1 ...

correct output
589662095

user output
589662095

Test 11

Verdict: ACCEPTED

input
32 172
? ? ? ? ? ? 7 8 ? ? 9 ? ? 1 7 ...

correct output
319164449

user output
319164449

Test 12

Verdict: ACCEPTED

input
100 580
8 ? 9 ? ? 6 4 ? ? ? 6 ? ? 4 ? ...

correct output
671479185

user output
671479185

Test 13

Verdict: ACCEPTED

input
96 724
1 ? ? ? 7 ? ? ? 10 ? ? 7 2 ? 8...

correct output
627075870

user output
627075870

Test 14

Verdict: ACCEPTED

input
100 289
4 ? 9 ? 6 ? ? 2 ? ? 1 8 ? ? ? ...

correct output
672526186

user output
672526186

Test 15

Verdict: ACCEPTED

input
12 0
0 0 0 0 0 0 0 0 0 0 0 0 

correct output
1

user output
1

Test 16

Verdict: ACCEPTED

input
100 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...

correct output
1

user output
1

Test 17

Verdict: ACCEPTED

input
70 700
10 10 10 10 10 10 10 10 10 10 ...

correct output
1

user output
1

Test 18

Verdict: ACCEPTED

input
100 1000
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...

correct output
1

user output
1

Test 19

Verdict: ACCEPTED

input
57 213
? ? 8 ? ? ? 10 1 1 8 ? ? 6 5 4...

correct output
843378101

user output
843378101

Test 20

Verdict: ACCEPTED

input
100 306
? 10 ? ? ? 10 6 ? ? ? 3 7 1 ? ...

correct output
646826362

user output
646826362