Advertisement
Guest User

Untitled

a guest
Jul 10th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.67 KB | None | 0 0
  1. import java.io.*
  2. import java.util.*
  3. import java.lang.Math.*
  4.  
  5. class C {
  6.     fun solve(io: FastIO) {
  7.         val s = io.nextWord()
  8.         val n = s.length
  9.         val d = Array(n, { IntArray(n, { 1e9.toInt() }) })
  10.         val p = Array(n, { IntArray(n, { -1 }) })
  11.  
  12.         for (i in 1 until n) {
  13.             d[i][i - 1] = 0
  14.         }
  15.  
  16.         for (i in 0 until n) {
  17.             d[i][i] = 1
  18.         }
  19.  
  20.         val pp = CharArray(333)
  21.         pp['('.toInt()] = ')'
  22.         pp['['.toInt()] = ']'
  23.         pp['{'.toInt()] = '}'
  24.  
  25.         for (len in 2..n) {
  26.             for (i in 0..n - len) {
  27.                 val j = i + len - 1
  28.                 d[i][j] = d[i + 1][j] + 1
  29.                 if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
  30.                     for (k in i+1..j) {
  31.                         if (pp[s[i].toInt()] == s[k]) {
  32.                             var c = d[i + 1][k - 1]
  33.                             if (k < j) {
  34.                                 c += d[k + 1][j]
  35.                             }
  36.                             if (d[i][j] > c) {
  37.                                 d[i][j] = c
  38.                                 p[i][j] = k
  39.                             }
  40.                         }
  41.                     }
  42.                 }
  43.             }
  44.         }
  45.  
  46.         fun genAns(i: Int, j: Int) {
  47.             if (i > j) {
  48.                 return
  49.             }
  50.             if (p[i][j] == -1) {
  51.                 genAns(i + 1, j)
  52.             } else {
  53.                 val k = p[i][j]
  54.                 io.print(s[i])
  55.                 genAns(i + 1, k - 1)
  56.                 io.print(s[k])
  57.                 genAns(k + 1, j)
  58.             }
  59.         }
  60.  
  61.         genAns(0, n - 1)
  62.     }
  63.  
  64.     fun main(args: Array<String>) {
  65.         FastIO(System.`in`, System.out).use {
  66.             solve(it)
  67.         }
  68.     }
  69.  
  70.     class FastIO(inp: InputStream, out: OutputStream) : PrintWriter(out) {
  71.         private val reader = BufferedReader(InputStreamReader(inp))
  72.         private var tokenizer = StringTokenizer("")
  73.  
  74.         fun nextToken(): String? {
  75.             while (!tokenizer.hasMoreTokens()) {
  76.                 val s = reader.readLine() ?: return null
  77.                 tokenizer = StringTokenizer(s)
  78.             }
  79.  
  80.             return tokenizer.nextToken()
  81.         }
  82.  
  83.         fun nextInt() = nextToken()!!.toInt()
  84.         fun nextLong() = nextToken()!!.toLong()
  85.         fun nextDouble() = nextToken()!!.toDouble()
  86.         fun nextWord() = nextToken()!!
  87.         fun nextLine() = reader.readLine()
  88.     }
  89.  
  90.     fun run() {
  91.         FastIO(System.`in`, System.out).use {
  92.             solve(it)
  93.         }
  94.     }
  95. }
  96.  
  97. fun main(args: Array<String>) {
  98.     C().run()
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement