Submission #338315


Source Code Expand

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<string>
#include<stack>
#include<cstdio>
#include<cmath>
using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<int,int> P;
typedef pair<int,P> P1;

#define fr first
#define sc second
#define mp make_pair
#define pb push_back
#define rep(i,x) for(int i=0;i<x;i++)
#define rep1(i,x) for(int i=1;i<=x;i++)
#define rrep(i,x) for(int i=x-1;i>=0;i--)
#define rrep1(i,x) for(int i=x;i>0;i--)
#define sor(v) sort(v.begin(),v.end())
#define rev(s) reverse(s.begin(),s.end())
#define lb(vec,a) lower_bound(vec.begin(),vec.end(),a)
#define ub(vec,a) upper_bound(vec.begin(),vec.end(),a)
#define uniq(vec) vec.erase(unique(vec.begin(),vec.end()),vec.end())
#define min_3(a,b,c) min(a,min(b,c))
#define max_3(a,b,c) max(a,max(b,c))
#define mp1(a,b,c) P1(a,P(b,c))
#define pque(a) priority_queue<a>
#define rpque(a) priority_queue<a,vector<a>,greater<a>>

const int INF=1000000000;
const int dir_4[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
const int dir_8[8][2]={{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
const int kaijou[10]={1,1,2,6,24,120,720,5040,40320,362880};

const ll M = 1000000007;

int main(){
	ll n,x;
	string s;
	
	cin >> n >> x >> s;
	
	ll dp[2][260][2][25] = {};
	ll t = 0,t_ = 1;
	dp[t][0][0][0] = 1;
	rep(i,n){
		char c = s[i];
		rep(j,260)rep(k,2)rep(l,25)dp[t_][j][k][l] = 0;
		if(c == '2' || c == '?'){
			rep(j,x){
				int k = 0;
					rep(l,23){
						dp[t_][j][1][l] += dp[t][j][k][l];
					}
				k = 1;
					rep(l,23){
						dp[t_][j][1][0] += dp[t][j][k][l];
					}
			}
		}
		if(c == '5' || c == '?'){
			rep(j,x){
				int k = 0;
					rep(l,23){
						dp[t_][j][0][0] += dp[t][j][k][l];
					}
				k = 1;
					rep(l,23){
						if(j+l+1 >= x)dp[t_][x][0][0] += dp[t][j][k][l];
						else dp[t_][j+l+1][0][l+1] += dp[t][j][k][l];
					}
			}
		}
		if(c == '?'){
			rep(j,x){
				rep(k,2){
					rep(l,23){
						dp[t_][j][0][0] += dp[t][j][k][l]*8;
					}
				}
			}
		}
		if(c != '2' && c != '5' && c != '?'){
			rep(j,x){
				rep(k,2){
					rep(l,23){
						dp[t_][j][0][0] += dp[t][j][k][l];
					}
				}
			}
		}
		if(c == '?')dp[t_][x][0][0] += dp[t][x][0][0]*10;
		else dp[t_][x][0][0] += dp[t][x][0][0];
		dp[t_][x][0][0] %= M;
		rep(j,x){
			rep(k,2){
				rep(l,23){
					dp[t_][j][k][l] %= M;
				}
			}
		}
		swap(t,t_);
	}
	
	cout << dp[t][x][0][0] << endl;
}

Submission Info

Submission Time
Task A - ニコニコ文字列2
User yokozuna57
Language C++11 (GCC 4.8.1)
Score 20
Code Size 2535 Byte
Status AC
Exec Time 48 ms
Memory 1060 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 24 ms 1056 KB
sample_02.txt AC 25 ms 1056 KB
subtask1_01.txt AC 24 ms 1052 KB
subtask1_02.txt AC 23 ms 1056 KB
subtask1_03.txt AC 24 ms 1056 KB
subtask1_04.txt AC 24 ms 924 KB
subtask1_05.txt AC 27 ms 1004 KB
subtask1_06.txt AC 27 ms 1052 KB
subtask1_07.txt AC 26 ms 924 KB
subtask1_08.txt AC 28 ms 1056 KB
subtask1_09.txt AC 25 ms 1056 KB
subtask1_10.txt AC 26 ms 1052 KB
subtask1_11.txt AC 28 ms 1060 KB
subtask1_12.txt AC 42 ms 1060 KB
subtask1_13.txt AC 27 ms 1060 KB
subtask1_14.txt AC 42 ms 1060 KB
subtask1_15.txt AC 43 ms 1060 KB
subtask1_16.txt AC 42 ms 1056 KB
subtask1_17.txt AC 48 ms 924 KB
subtask1_18.txt AC 41 ms 1052 KB
subtask1_19.txt AC 48 ms 1056 KB
subtask1_20.txt AC 43 ms 1060 KB
subtask1_21.txt AC 27 ms 1060 KB
subtask1_22.txt AC 27 ms 932 KB