Submission #2866450


Source Code Expand

package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
	"strconv"
	"strings"
)

var (
	readString func() string
	stdout     *bufio.Writer
)

func init() {
	readString = newReadString(os.Stdin)
	stdout = bufio.NewWriter(os.Stdout)
}

func newReadString(ior io.Reader) func() string {
	r := bufio.NewScanner(ior)
	r.Buffer(make([]byte, 1024), int(1e+11))
	r.Split(bufio.ScanWords)

	return func() string {
		if !r.Scan() {
			panic("Scan failed")
		}
		return r.Text()
	}
}

func readInt() int {
	return int(readInt64())
}

func readInt64() int64 {
	i, err := strconv.ParseInt(readString(), 0, 64)
	if err != nil {
		panic(err.Error())
	}
	return i
}

func readIntSlice(n int) []int {
	b := make([]int, n)
	for i := 0; i < n; i++ {
		b[i] = readInt()
	}
	return b
}

func readLengthAndSlice() []int {
	n := readInt()
	return readIntSlice(n)
}

func printf(f string, args ...interface{}) (int, error) {
	return fmt.Fprintf(stdout, f, args...)
}

func println(args ...interface{}) (int, error) {
	return fmt.Fprintln(stdout, args...)
}

func minInt(a, b int) int {
	if a < b {
		return a
	}
	return b
}

func minUint(a, b uint) uint {
	if a < b {
		return a
	}
	return b
}

func minInt64(a, b int64) int64 {
	if a < b {
		return a
	}
	return b
}

func minUint64(a, b uint64) uint64 {
	if a < b {
		return a
	}
	return b
}

func maxInt(a, b int) int {
	if a < b {
		return b
	}
	return a
}

func maxUint(a, b uint) uint {
	if a < b {
		return b
	}
	return a
}
func maxInt64(a, b int64) int64 {
	if a < b {
		return b
	}
	return a
}

func maxUint64(a, b uint64) uint64 {
	if a < b {
		return b
	}
	return a
}

func absInt(a int) int {
	if a < 0 {
		return -a
	}
	return a
}

func absInt64(a int64) int64 {
	if a < 0 {
		return -a
	}
	return a
}

// readString() string
// readInt() int
// readIntSlice(n int) []int
// readLengthAndSlice() []int
func reverse(s string) string {
	b := []byte(s)
	for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
		b[i], b[j] = b[j], b[i]
	}
	return string(b)
}

func main() {
	defer stdout.Flush()

	s := readString()
	t := readString()

	rsb := []byte(reverse(s))
	rtb := []byte(reverse(t))

	for i := 0; i+len(rtb) <= len(rsb); i++ {
		matched := true
		for j := 0; j < len(rtb); j++ {
			if rsb[i+j] != '?' && rsb[i+j] != rtb[j] {
				matched = false
				break
			}
		}
		if matched {
			b := append(rsb[0:i], rtb...)
			b = append(b, rsb[i+len(rtb):]...)
			println(strings.Replace(reverse(string(b)), "?", "a", -1))
			return
		}
	}
	println("UNRESTORABLE")

}

Submission Info

Submission Time
Task C - Dubious Document 2
User ktateish
Language Go (1.6)
Score 300
Code Size 2663 Byte
Status AC
Exec Time 1 ms
Memory 640 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 300 / 300
Status
AC × 2
AC × 14
Set Name Test Cases
Sample s1.txt, s2.txt
All in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, s1.txt, s2.txt
Case Name Status Exec Time Memory
in01.txt AC 1 ms 640 KB
in02.txt AC 1 ms 640 KB
in03.txt AC 1 ms 640 KB
in04.txt AC 1 ms 640 KB
in05.txt AC 1 ms 640 KB
in06.txt AC 1 ms 640 KB
in07.txt AC 1 ms 640 KB
in08.txt AC 1 ms 640 KB
in09.txt AC 1 ms 640 KB
in10.txt AC 1 ms 640 KB
in11.txt AC 1 ms 640 KB
in12.txt AC 1 ms 640 KB
s1.txt AC 1 ms 640 KB
s2.txt AC 1 ms 640 KB