Prof. Vasechkin wants to represent positive integer n as a sum of addends, where each addends is an integer number containing only 1s. For example, he can represent 121 as 121=111+11–1. Help him to find the least number of digits 1 in such sum.
Input
The first line of the input contains integer n (1 ≤ n < 1015).
Output
Print expected minimal number of digits 1.
Examples
input
121
output
6
Solution:
import java.lang.Math.abs private fun readLn() = readLine()!! // string line private fun readInt() = readLn().toInt() // single int private fun readLong() = readLn().toLong() // single long private fun readDouble() = readLn().toDouble() // single double private fun readStrings() = readLn().split(" ") // list of strings private fun readInts() = readStrings().map { it.toInt() } // list of ints private fun readLongs() = readStrings().map { it.toLong() } // list of longs private fun readDoubles() = readStrings().map { it.toDouble() } // list of doubles fun main(args: Array<String>) { var s = readLn().reversed() + "000" var len = s.length val MAX = 200 var dp = Array(len + 1, { Array(2 * MAX, { IntArray(2 * MAX, { 12345 }) }) }) dp[0][MAX][MAX] = 0 for (i in 0..len - 1) { for (cur in -MAX..MAX-1) { for (carry in -MAX..MAX-1) { var ft = dp[i][cur + MAX][carry + MAX] if (ft == 12345) { continue } for (delta in -100..100) { var newCur = cur + delta var here = newCur + carry var value = (here % 10 + 10) % 10 if (value != s[i] - '0') { continue } var newCarry = (here - value) / 10 var newFt = ft + abs(delta) * i if (newCur >= -MAX && newCur < MAX && newCarry >= -MAX && newCarry < MAX && newFt < dp[i + 1][newCur + MAX][newCarry + MAX]) { dp[i + 1][newCur + MAX][newCarry + MAX] = newFt } } } } } println(dp[len][MAX][MAX]) }
Related posts:
Buy Low Sell High
Packmen
Group Projects
Not Wool Sequences
Bear and Paradox
Unsolvable
Suns and Rays
Almost Same Distance
Field expansion
Cron
Chaotic V.
Photo to Remember
Second best Minimum Spanning Tree - Using Kruskal and Lowest Common Ancestor
Permutations
Maximum Reduction
Network Configuration
Subarray Cuts
Elections
Discrete Logarithm
Power Tree
Median on Segments
P-binary
Epic Convolution
Andrey and Problem
Simple Skewness
King's Path
Elections
Pearls in a Row
Yura and Developers
Little Artem and Dance
AND Segments
Restoring Three Numbers