123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package main
- import (
- "bufio"
- "fmt"
- "os"
- "strconv"
- "strings"
- )
- func mousetrap(scanner *bufio.Scanner) [][]int {
- caseCnt := ReadInt(scanner)
- answer := make([][]int, caseCnt)
- for i := 0; i < caseCnt; i++ {
- cardCnt := ReadInt(scanner)
- deck := make([]int, cardCnt)
- st := NewSegmentTree(cardCnt)
- for i, slot := 0, 0; st[1] != 0; i++ {
- slot = st.Search(slot, i+1)
- st.Update(slot, 0)
- deck[slot] = i + 1
- }
- pos := ReadInts(scanner)
- answer[i] = make([]int, len(pos)-1)
- for j := 1; j < len(pos); j++ {
- answer[i][j-1] = deck[pos[j]-1]
- }
- }
- return answer
- }
- func main() {
- inputFiles := []string{"C-small-practice.in", "C-large-practice.in", "test.in"}
- outputFiles := []string{"result-small.out", "result-large.out", "test.out"}
- const (
- small = iota
- large
- test
- )
- fileType := test
- fin, _ := os.Open(inputFiles[fileType])
- defer fin.Close()
- scanner := bufio.NewScanner(fin)
- answer := mousetrap(scanner)
- fout, _ := os.Create(outputFiles[fileType])
- defer fout.Close()
- for i := range answer {
- var ans strings.Builder
- for _, n := range answer[i] {
- ans.WriteString(" " + strconv.Itoa(n))
- }
- s := fmt.Sprintf("Case #%d:%s\n", i+1, ans.String())
- fout.WriteString(s)
- }
- }
|