Avoid Zeros July 17, 2019 https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWqPrpnKSCQDFAT_&categoryId=AWqPrpnKSCQDFAT_&categoryType=CODE Source explicit CProbSolve(const int N) { m_minZeros = INF; m_mapSizeN = N; P_IFNOT(m_mapSizeN >= 2 , m_mapSizeN); P_IFNOT(m_mapSizeN <= 1000, m_mapSizeN); FOR(row, m_mapSizeN) { vii viiRow; vi viRow; FOR(col, m_mapSizeN) { int val = 0; cin >> val; P_IFNOT(val >= 0, val); int numTwos = INF; int numFives = INF; if (val > 0) { numTwos = _CountFactor(2, val); numFives = _CountFactor(5, val); } viiRow.push_back(ii(numTwos, numFives)); viRow.push_back(val); } m_map.push_back(viiRow); m_mapCanGo.push_back(viRow); } _Solve(); } int _CountFactor(const int factor, const int val) { int cnt = 0; int quotient = val; while (quotient % factor == 0) { quotient /= factor; cnt++; } return cnt; } void _UpdateFactorMap() { FOR_INC(row, 1, m_mapSizeN) { m_map[row][0].first += m_map[row - 1][0].first; if (m_map[row][0].first > INF) m_map[row][0].first = INF; m_map[row][0].second += m_map[row - 1][0].second; if (m_map[row][0].second > INF) m_map[row][0].second = INF; } FOR_INC(col, 1, m_mapSizeN) { m_map[0][col].first += m_map[0][col - 1].first; if (m_map[0][col].first > INF) m_map[0][col].first = INF; m_map[0][col].second += m_map[0][col - 1].second; if (m_map[0][col].second > INF) m_map[0][col].second = INF; } FOR_INC(row, 1, m_mapSizeN) { FOR_INC(col, 1, m_mapSizeN) { m_map[row][col].first += _min(m_map[row - 1][col].first, m_map[row][col - 1].first); if (m_map[row][col].first > INF) m_map[row][col].first = INF; m_map[row][col].second += _min(m_map[row - 1][col].second, m_map[row][col - 1].second); if (m_map[row][col].second > INF) m_map[row][col].second = INF; } } m_minZeros = _min(m_map[m_mapSizeN - 1][m_mapSizeN - 1].first, m_map[m_mapSizeN - 1][m_mapSizeN - 1].second); } GitHub AvoidZeros Share Share on Facebook Tweet Share on Reddit Email Tags big-number cpp dfs-pitfall dynamic-programming mathematics