Submission #343358


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

ll dp[255][10][255][255];

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

  if(str[0] == '?'){
    rep(i,10){
      if(i==2){
        dp[0][i][1][0] = 1;
      }else{
        dp[0][i][0][0] = 1;
      }
    }
  }else{
    int t = str[0]-'0';
    if(t==2){
      dp[0][t][1][0] = 1;
    }else{
      dp[0][t][0][0] = 1;
    }
  }

  rep(i,N-1){
    rep(j,10){
      rep(k,i+2){
        rep(l,X+2){
          //cout << i << " " << j << " " << k << " " << l << " " << dp[i][j][k][l] << endl;
          
          if(str[i+1]=='?'){
            rep(t,10){
              if(t==2){
                if(j==5){
                  dp[i+1][t][k+1][l] += dp[i][j][k][l];
                  dp[i+1][t][k+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==5){
                if(j==2){
                  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{
                  dp[i+1][t][1][l] += dp[i][j][k][l];
                  dp[i+1][t][1][l] %= MOD;
                }              
              }
              else{
                dp[i+1][t][0][l] += dp[i][j][k][l];
                dp[i+1][t][0][l] %= MOD;
              }
            }
          }else{
            int t = str[i+1]-'0';
            if(t==2){
              if(j==5){
                dp[i+1][t][k+1][l] += dp[i][j][k][l];
                dp[i+1][t][k+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==5){
              if(j==2){
                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{
                dp[i+1][t][1][l] += dp[i][j][k][l];
                dp[i+1][t][1][l] %= MOD;
              }              
            }
            else{
              dp[i+1][t][0][l] += dp[i][j][k][l];
              dp[i+1][t][0][l] %= MOD;
            }
          }
        }
      }
    }
  }

  ll ret = 0;
  rep(i,10){
    rep(j,N){
      ret = (ret + dp[N-1][i][j][X])%MOD;
    }
  }
  cout << ret << endl;
  return 0;
}

Submission Info

Submission Time
Task A - ニコニコ文字列2
User phyllo
Language C++ (G++ 4.6.4)
Score 0
Code Size 2979 Byte
Status CE

Compile Error

collect2: ld terminated with signal 9 [Killed]