Submission #344505


Source Code Expand

#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <iostream>
#include <queue>
#include <list>
#include <map>
#include <numeric>
#include <set>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
#define REP(i,a,n) for(int i=(a); i<(int)(n); i++)
#define rep(i,n) REP(i,0,n)
#define FOR(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it)
#define ALLOF(c) (c).begin(), (c).end()
typedef long long ll;

#define MOD 1000000007

int dp[255][3][255][255];

int main(){
  int N, X;
  string str;
  cin >> N >> X;
  cin >> str;

  if(str[0] == '?'){
    dp[0][1][1][0] = 1;
    dp[0][2][0][0] = 1;
    dp[0][0][0][0] = 8;
  }else{
    int t = str[0]-'0';
    if(t==2){
      dp[0][1][1][0] = 1;
    }
    else if(t==5){
      dp[0][2][0][0] = 1;
    }
    else{
      dp[0][0][0][0] = 1;
    }
  }

  rep(i,N-1){
    rep(j,3){
      rep(k,N){
        rep(l,X+1){
          //cout << i << " " << j << " " << k << " " << l << " " << dp[i][j][k][l] << endl;
          
          if(str[i+1]=='?'){
            rep(t,3){
              if(t==1){
                if(j==2){
                  dp[i+1][t][k+1][l] += dp[i][j][k][l];
                  dp[i+1][t][k+1][l] %= MOD;
                }
                else if(j==1){
                  dp[i+1][t][1][l] += dp[i][j][k][l];
                  dp[i+1][t][1][l] %= MOD;
                }
                else{
                  dp[i+1][t][1][l] = (dp[i+1][t][1][l] + dp[i][j][k][l])%MOD;
                }
              }
              else if(t==2){
                if(j==1){
                  dp[i+1][t][k+1][min(X,l+(k+1)/2)] += dp[i][j][k][l];
                  dp[i+1][t][k+1][min(X,l+(k+1)/2)] %= MOD;
                }
                else if(j==2){
                  dp[i+1][t][0][l] += dp[i][j][k][l];
                  dp[i+1][t][0][l] %= MOD;
                }
                else{
                  dp[i+1][t][0][l] = (dp[i+1][t][0][l] + dp[i][j][k][l])%MOD;
                }              
              }
              else{
                dp[i+1][t][0][l] = (dp[i+1][t][0][l] + 8LL*dp[i][j][k][l])%MOD;
                dp[i+1][t][0][l] %= MOD;
              }
            }
          }else{
            int in = str[i+1]-'0';
            int t = 0;
            if(in == 2) t = 1;
            if(in == 5) t = 2;
            
            if(t==1){
              if(j==2){
                dp[i+1][t][k+1][l] += dp[i][j][k][l];
                dp[i+1][t][k+1][l] %= MOD;
              }
              else if(j==1){
                dp[i+1][t][1][l] += dp[i][j][k][l];
                dp[i+1][t][1][l] %= MOD;
              }
              else{
                dp[i+1][t][1][l] += dp[i][j][k][l];
                dp[i+1][t][1][l] %= MOD;
              }
            }
            else if(t==2){
              if(j==1){
                dp[i+1][t][k+1][min(X,l+(k+1)/2)] += dp[i][j][k][l];
                dp[i+1][t][k+1][min(X,l+(k+1)/2)] %= MOD;
              }
              else if(j==2){
                dp[i+1][t][0][l] += dp[i][j][k][l];
                dp[i+1][t][0][l] %= MOD;
              }
              else{
                dp[i+1][t][0][l] += dp[i][j][k][l];
                dp[i+1][t][0][l] %= MOD;
              }              
            }
            else{
              dp[i+1][t][0][l] += dp[i][j][k][l];
              dp[i+1][t][0][l] %= MOD;
            }
          }
        }
      }
    }
  }

  ll ret = 0;
  ll all = 1;
  rep(i,N){
    if(str[i]=='?') all = (all * 10LL)%MOD;
  }
  rep(i,3){
    rep(j,N+1){
      rep(k,X){
        ret = (ret + dp[N-1][i][j][k])%MOD;
      }
    }
  }
  cout << (all - ret + MOD)%MOD << endl;
  return 0;
}

Submission Info

Submission Time
Task A - ニコニコ文字列2
User phyllo
Language C++ (G++ 4.6.4)
Score 20
Code Size 3857 Byte
Status AC
Exec Time 1812 ms
Memory 129568 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 20 / 20
Status
AC × 2
AC × 22
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt
Case Name Status Exec Time Memory
sample_01.txt AC 34 ms 1076 KB
sample_02.txt AC 31 ms 1604 KB
subtask1_01.txt AC 30 ms 1080 KB
subtask1_02.txt AC 33 ms 1136 KB
subtask1_03.txt AC 27 ms 1140 KB
subtask1_04.txt AC 29 ms 1100 KB
subtask1_05.txt AC 178 ms 28232 KB
subtask1_06.txt AC 204 ms 27152 KB
subtask1_07.txt AC 151 ms 24244 KB
subtask1_08.txt AC 135 ms 9908 KB
subtask1_09.txt AC 84 ms 8816 KB
subtask1_10.txt AC 45 ms 3824 KB
subtask1_11.txt AC 345 ms 59084 KB
subtask1_12.txt AC 1086 ms 60316 KB
subtask1_13.txt AC 421 ms 91684 KB
subtask1_14.txt AC 1157 ms 85820 KB
subtask1_15.txt AC 1077 ms 79644 KB
subtask1_16.txt AC 1088 ms 80400 KB
subtask1_17.txt AC 1812 ms 129568 KB
subtask1_18.txt AC 845 ms 65132 KB
subtask1_19.txt AC 1793 ms 127632 KB
subtask1_20.txt AC 1119 ms 82448 KB
subtask1_21.txt AC 510 ms 129292 KB
subtask1_22.txt AC 355 ms 79504 KB