Advertisement
AlexTyl

Untitled

Jul 24th, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.81 KB | None | 0 0
  1. import java.io.*
  2. import java.math.*
  3. import java.text.*
  4. import java.util.*
  5. import java.util.regex.*
  6.  
  7. /*
  8.  * Complete the twoTwo function below.
  9.  */
  10. fun twoTwo(a: String): Int {
  11.  
  12.     var count = 0
  13.  
  14.     for (i in 0 until a.length){
  15.         for (j in (i + 1)..a.length){
  16.             val currentNum = a.substring(i, j)
  17.             val node = TREE.start(currentNum) ?: break
  18.             if (node.find(currentNum)) count++
  19.         }
  20.     }
  21.  
  22.     return count
  23. }
  24.  
  25. var TREE = MishaNode()
  26. class MishaNode(var number: Char = '!', val childs: Array<MishaNode?> = Array(10){ null }, var flag: Boolean = false, var size: Int = 0){
  27.     fun add(s: String, a: Int = 0){
  28.         if (s.length > a && s.isNotEmpty()){
  29.             val index = s[a] - '0'
  30.             if (childs[index] == null)
  31.                 childs[index] = MishaNode(s[a])
  32.             childs[index]!!.add(s, a + 1)
  33.         } else {
  34.             size = a
  35.             flag = true
  36.         }
  37.     }
  38.  
  39.     fun find(s: String, a: Int = size): Boolean {
  40.         if (s.length == a)
  41.             return flag
  42.         val index = s[a] - '0'
  43.         return childs[index]?.find(s, a + 1) ?: run { return false }
  44.     }
  45.  
  46.     fun start(s: String, a: Int = 0): MishaNode? {
  47.         if (s.length == a + 1) {
  48.             this.size = a
  49.             return this
  50.         }
  51.         val index = s[a] - '0'
  52.         return childs[index]?.start(s, a + 1) ?: run { return null }
  53.     }
  54. }
  55.  
  56.  
  57. fun main(args: Array<String>) {
  58.  
  59.     var number = BigInteger.ONE
  60.     for (i in 0..800){
  61.         TREE.add(number.toString())
  62.         number = number.shiftLeft(1)
  63.     }
  64.  
  65.     val scan = System.`in`.bufferedReader()
  66.  
  67.     val t = scan.readLine().trim().toInt()
  68.  
  69.     for (tItr in 1..t) {
  70.         val a = scan.readLine()
  71.  
  72.         val result = twoTwo(a)
  73.  
  74.         println(result)
  75.     }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement