Submission #525076


Source Code Expand

/*
 * a.cc: A: 
 */

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<deque>
#include<algorithm>
#include<numeric>
#include<utility>
#include<complex>
#include<functional>

using namespace std;

/* constant */

const int MAX_N = 252;
const int MAX_X = 252;
const int MAX_L = 22; // MAX_L*(MAX_L+1)/2>=MAX_X

typedef long long ll;

const ll MOD = 1000000007;

/* typedef */

/* global variables */

ll dp[MAX_N + 1][MAX_X][MAX_L + 1][10];

/* subroutines */

inline void addmod(ll& a, ll& b) { a = (a + b) % MOD; }

/* main */

int main() {
  int n, x;
  string s;
  cin >> n >> x >> s;

  ll all = 1;
  for (int i = 0; i < n; i++)
    if (s[i] == '?') all = (all * 10) % MOD;
  //cout << all << endl;

  int maxl = 0;
  while (maxl * (maxl + 1) / 2 < x) maxl++;
  
  dp[0][0][0][0] = 1;
  
  for (int i = 0; i < n; i++) {
    int nd0, nd1;
    if (s[i] == '?') nd0 = 0, nd1 = 9;
    else nd0 = nd1 = s[i] - '0';

    for (int j = 0; j < x; j++)
      for (int l = 0; l < maxl; l++)
	for (int cd = 0; cd < 10; cd++)
	  if (dp[i][j][l][cd] > 0)
	    for (int nd = nd0; nd <= nd1; nd++) {
	      if (cd == 5 && nd == 2)
		addmod(dp[i + 1][j][l][nd], dp[i][j][l][cd]);
	      else if (cd == 2 && nd == 5) {
		int nj = j + (l + 1);
		if (nj < x)
		  addmod(dp[i + 1][nj][l + 1][nd], dp[i][j][l][cd]);
	      }
	      else
		addmod(dp[i + 1][j][0][nd], dp[i][j][l][cd]);
	    }
  }

  ll sum = 0;
  for (int j = 0; j < x; j++)
    for (int l = 0; l < maxl; l++)
      for (int d = 0; d < 10; d++)
	addmod(sum, dp[n][j][l][d]);

  printf("%lld\n", (all + MOD - sum) % MOD);

  /*
  for (int i = 0; i <= n; i++)
    for (int j = 0; j < x; j++)
      for (int l = 0; l < maxl; l++)
	for (int d = 0; d < 10; d++)
	  printf("dp[%d][%d][%d][%d]=%lld\n", i, j, l, d, dp[i][j][l][d]);
  */
  return 0;
}

Submission Info

Submission Time
Task A - ニコニコ文字列2
User tnakao
Language C++ (G++ 4.6.4)
Score 20
Code Size 2048 Byte
Status AC
Exec Time 479 ms
Memory 99892 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 26 ms 924 KB
sample_02.txt AC 26 ms 1048 KB
subtask1_01.txt AC 25 ms 804 KB
subtask1_02.txt AC 25 ms 928 KB
subtask1_03.txt AC 26 ms 924 KB
subtask1_04.txt AC 25 ms 924 KB
subtask1_05.txt AC 30 ms 2096 KB
subtask1_06.txt AC 62 ms 9264 KB
subtask1_07.txt AC 34 ms 1880 KB
subtask1_08.txt AC 93 ms 14004 KB
subtask1_09.txt AC 49 ms 6448 KB
subtask1_10.txt AC 38 ms 3248 KB
subtask1_11.txt AC 39 ms 4908 KB
subtask1_12.txt AC 178 ms 11184 KB
subtask1_13.txt AC 33 ms 2224 KB
subtask1_14.txt AC 226 ms 31412 KB
subtask1_15.txt AC 305 ms 66228 KB
subtask1_16.txt AC 299 ms 62256 KB
subtask1_17.txt AC 479 ms 99892 KB
subtask1_18.txt AC 158 ms 1836 KB
subtask1_19.txt AC 456 ms 99888 KB
subtask1_20.txt AC 304 ms 61492 KB
subtask1_21.txt AC 27 ms 920 KB
subtask1_22.txt AC 27 ms 924 KB