Submission #2337429
Source Code Expand
#include<bits/stdc++.h> using namespace std; const int mod = 1e9 + 7; string A, B, C; int dp[51][2]; int rec(int idx, bool up) { if(idx == -1) return(!up); if(~dp[idx][up]) return(dp[idx][up]); int ret = 0; for(int i = idx == 0; i <= 9; i++) { if(A[idx] == i || A[idx] == '?') { for(int j = idx == 0; j <= 9; j++) { if(B[idx] == j || B[idx] == '?') { if((idx != 0 || (i + j + up) % 10 != 0) && (C[idx] == (i + j + up) % 10 || C[idx] == '?')) { (ret += rec(idx - 1, (i + j + up) >= 10)) %= mod; } } } } } return(dp[idx][up] = ret); } int main() { while(cin >> A, A != "0") { cin >> B; cin >> C; for(int i = 0; i < A.size(); i++) if(isdigit(A[i])) A[i] -= '0'; for(int i = 0; i < B.size(); i++) if(isdigit(B[i])) B[i] -= '0'; for(int i = 0; i < C.size(); i++) if(isdigit(C[i])) C[i] -= '0'; memset(dp, -1, sizeof(dp)); cout << rec(A.size() - 1, 0) << endl; } }
Submission Info
Submission Time | |
---|---|
Task | B - Restore Calculation |
User | ei13333 |
Language | C++14 (GCC 5.4.1) |
Score | 100 |
Code Size | 1017 Byte |
Status | AC |
Exec Time | 3 ms |
Memory | 256 KB |
Judge Result
Set Name | all | ||
---|---|---|---|
Score / Max Score | 100 / 100 | ||
Status |
|
Set Name | Test Cases |
---|---|
all | Merged |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
Merged | AC | 3 ms | 256 KB |