Submission #337914
Source Code Expand
#include <iostream> #include <string> #include <vector> #include <string> #include <map> #include <set> #include <algorithm> #include <cstdio> #include <cstdint> #include <stack> #include <memory.h> using namespace std; #pragma region mint // modulo integer // M: modulo number // * M < 2^31 // * M must be prime if you use division template <int64_t M> class mint { public: mint():v(0) {} mint(int n): v(n % M) {} int64_t get() const { return v; } mint &operator+=(const mint &r) { v = (v + r.v) % M; return *this; } mint &operator-=(const mint &r) { v = (v - r.v + M) % M; return *this; } mint &operator*=(const mint &r) { v = (v * r.v) % M; return *this; } mint &operator/=(const mint &r) { return (*this) *= r.inv(); } mint pow(int r) const { mint k = *this, ret = 1; while (r > 0) { if (r % 2 != 0) ret *= k; r /= 2; k *= k; } return ret; } mint inv() const { return pow(M - 2); } private: int64_t v; }; template <int64_t M> inline mint<M> operator+(mint<M> l, const mint<M> &r) { return l += r; } template <int64_t M> inline mint<M> operator-(mint<M> l, const mint<M> &r) { return l -= r; } template <int64_t M> inline mint<M> operator*(mint<M> l, const mint<M> &r) { return l *= r; } template <int64_t M> inline mint<M> operator/(mint<M> l, const mint<M> &r) { return l /= r; } template <int64_t M> inline ostream &operator<<(ostream &os, const mint<M> &r) { return os << r.get(); } #pragma endregion typedef mint<1000000007> MINT; MINT dp[256][256][256]; bool flg[256][256][256]; inline int calc(int len) { len /= 2; return (len + 1) * len / 2; } MINT solve(int pos, int len, int rest, const string &s) { if (flg[pos][len][rest]) return dp[pos][len][rest]; MINT &ret = dp[pos][len][rest]; flg[pos][len][rest] = true; ret = 0; if (calc(len) >= rest) { ret = 1; for (int i = pos; i < s.length(); i++) if (s[i] == '?') ret *= 10; return ret; } if (calc(len + s.length() - pos) < rest) return ret = 0; if (pos == s.length()) return ret = 0; for (int i = 0; i <= 9; i++) { if (s[pos] == '?' || s[pos] == '0' + i) { int nlen = 0; if (len % 2 == 0 && i == 2) nlen = len + 1; if (len % 2 == 1 && i == 5) nlen = len + 1; if (i == 2 && nlen == 0) nlen = 1; int nrest = rest; if (nlen < len) { nrest -= calc(len); } nrest = max(0, nrest); ret += solve(pos + 1, nlen, nrest, s); } } return ret; } int main() { int n, x; cin >> n >> x; string s; cin >> s; memset(flg, 0, sizeof(flg)); cout << solve(0, 0, x, s) << endl; return 0; }
Submission Info
Submission Time | |
---|---|
Task | A - ニコニコ文字列2 |
User | tanakh |
Language | C++11 (GCC 4.8.1) |
Score | 20 |
Code Size | 2738 Byte |
Status | AC |
Exec Time | 658 ms |
Memory | 148268 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 20 / 20 | ||||
Status |
|
|
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 | 260 ms | 148252 KB |
sample_02.txt | AC | 259 ms | 148140 KB |
subtask1_01.txt | AC | 262 ms | 148256 KB |
subtask1_02.txt | AC | 254 ms | 148132 KB |
subtask1_03.txt | AC | 257 ms | 148260 KB |
subtask1_04.txt | AC | 260 ms | 148140 KB |
subtask1_05.txt | AC | 260 ms | 148264 KB |
subtask1_06.txt | AC | 259 ms | 148260 KB |
subtask1_07.txt | AC | 261 ms | 148260 KB |
subtask1_08.txt | AC | 266 ms | 148260 KB |
subtask1_09.txt | AC | 265 ms | 148256 KB |
subtask1_10.txt | AC | 256 ms | 148180 KB |
subtask1_11.txt | AC | 256 ms | 148260 KB |
subtask1_12.txt | AC | 265 ms | 148264 KB |
subtask1_13.txt | AC | 261 ms | 148268 KB |
subtask1_14.txt | AC | 265 ms | 148252 KB |
subtask1_15.txt | AC | 281 ms | 148264 KB |
subtask1_16.txt | AC | 281 ms | 148192 KB |
subtask1_17.txt | AC | 658 ms | 148264 KB |
subtask1_18.txt | AC | 258 ms | 148268 KB |
subtask1_19.txt | AC | 522 ms | 148252 KB |
subtask1_20.txt | AC | 284 ms | 148256 KB |
subtask1_21.txt | AC | 254 ms | 148260 KB |
subtask1_22.txt | AC | 257 ms | 148140 KB |