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
AC × 1
Set Name Test Cases
all Merged
Case Name Status Exec Time Memory
Merged AC 3 ms 256 KB