Return to problem list

2016-1A Problem A

Final solution

cmd.go:
save   open on GitHub
// package, import, etc...

func start() {
  // read T, repeat test() T times...
}

func test() {
	s := mustReadLine()
	if len(s) == 0 {
		stdout.WriteByte('\n')
		return
	}
	buffer := make([]byte, len(s)*2)
	startPtr := len(s)
	l := 0
	for ; l < len(s); l++ {
		if l == 0 {
			buffer[startPtr] = s[0]
			continue
		}
		charToAdd := s[l]
		if charToAdd >= buffer[startPtr] {
			// prepend
			startPtr--
			buffer[startPtr] = charToAdd
		} else {
			// append
			buffer[startPtr+l] = charToAdd
		}
	}
	stdout.WriteString(string(buffer[startPtr : startPtr+l]))
	stdout.WriteByte('\n')
}

// boilerplate omitted...

Sample test cases given in question

sample.in:
save   open on GitHub
7
CAB
JAM
CODE
ABAAB
CABCBBABC
ABCABCABC
ZXCASDQWE