Submission #555928


Source Code Expand

package main

import (
	"bufio"
	"os"
	"strconv"
	"fmt"
	"math/big"
	"io"
)

var rdr = bufio.NewReader(os.Stdin)

func nextInt() int {
	i, e := strconv.Atoi(readToken(20))
	if e != nil {
		panic(e)
	}
	return i
}

func nextString(limit int) string {
	return readToken(limit)
}

func readToken(limit int) string {
	buf := make([]byte, 0, limit)

	for {
		byte, err := rdr.ReadByte()
		if err != nil {
			if err == io.EOF {
				break
			}
		}
		if byte != 10 && byte != 13 && byte != 32 {
			buf = append(buf, byte)
			break
		}
	}
	for {
		byte, err := rdr.ReadByte()
		if err != nil {
			if err == io.EOF {
				break
			}
		}
		if byte == 10 || byte == 13 || byte == 32 {
			break
		}
		buf = append(buf, byte)
	}
	return string(buf)
}

const INF = 1000000000

func main() {
	n := nextInt()
	a := nextInt() - 1

	k := nextString(100010)
	b := make([]int, n)
	for i := 0 ; i < n  ; i++ {
		b[i] = nextInt() - 1
	}
	M := big.NewInt(0)
	for i := 0 ; i < len(k) ; i++ {
		M.Mul(M, big.NewInt(10))
		M.Add(M, big.NewInt(int64(k[i] - '0')))
	}
	M.Add(M, big.NewInt(-1))

	var time int64 = 0
	var cycle int64 = 0
	firstVisit := make([]int64, n)
	part := make([]int, n+10)

	for i := 0 ; i < n ; i++ {
		firstVisit[i] = INF
	}


	now := b[a]
	for {
		if firstVisit[now] != INF {
			cycle = time - firstVisit[now]
			break
		}
		part[time] = now
		firstVisit[now] = time
		now = b[now]
		time++
	}

	answer := 0
	if (M.Cmp(big.NewInt(firstVisit[now])) < 0) {
		answer = part[M.Int64()]
	} else {
		answer = part[firstVisit[now] + M.Mod(M.Sub(M, big.NewInt(firstVisit[now])), big.NewInt(cycle)).Int64()]
	}
	fmt.Println(answer+1)
}

Submission Info

Submission Time
Task D - へんてこ辞書
User hamadu
Language Go (1.4.1)
Score 100
Code Size 1725 Byte
Status AC
Exec Time 844 ms
Memory 4696 KB

Judge Result

Set Name Sample Subtask1 All
Score / Max Score 0 / 0 50 / 50 50 / 50
Status
AC × 2
AC × 12
AC × 25
Set Name Test Cases
Sample subtask0_sample_01.txt, subtask0_sample_03.txt
Subtask1 subtask0_0.txt, subtask0_1.txt, subtask0_2.txt, subtask0_3.txt, subtask0_4.txt, subtask0_5.txt, subtask0_6.txt, subtask0_7.txt, subtask0_8.txt, subtask0_9.txt, subtask0_sample_01.txt, subtask0_sample_03.txt
All subtask0_0.txt, subtask0_1.txt, subtask0_2.txt, subtask0_3.txt, subtask0_4.txt, subtask0_5.txt, subtask0_6.txt, subtask0_7.txt, subtask0_8.txt, subtask0_9.txt, subtask0_sample_01.txt, subtask0_sample_03.txt, subtask1_0.txt, subtask1_1.txt, subtask1_10.txt, subtask1_11.txt, subtask1_2.txt, subtask1_3.txt, subtask1_4.txt, subtask1_5.txt, subtask1_6.txt, subtask1_7.txt, subtask1_8.txt, subtask1_9.txt, subtask1_sample_02.txt
Case Name Status Exec Time Memory
subtask0_0.txt AC 65 ms 3120 KB
subtask0_1.txt AC 58 ms 2732 KB
subtask0_2.txt AC 60 ms 2984 KB
subtask0_3.txt AC 53 ms 2596 KB
subtask0_4.txt AC 66 ms 3240 KB
subtask0_5.txt AC 59 ms 2924 KB
subtask0_6.txt AC 55 ms 2576 KB
subtask0_7.txt AC 59 ms 2996 KB
subtask0_8.txt AC 53 ms 2644 KB
subtask0_9.txt AC 63 ms 3112 KB
subtask0_sample_01.txt AC 26 ms 1184 KB
subtask0_sample_03.txt AC 28 ms 1072 KB
subtask1_0.txt AC 558 ms 3688 KB
subtask1_1.txt AC 728 ms 4008 KB
subtask1_10.txt AC 836 ms 4696 KB
subtask1_11.txt AC 25 ms 1184 KB
subtask1_2.txt AC 372 ms 3676 KB
subtask1_3.txt AC 325 ms 3236 KB
subtask1_4.txt AC 386 ms 3240 KB
subtask1_5.txt AC 470 ms 4144 KB
subtask1_6.txt AC 844 ms 3112 KB
subtask1_7.txt AC 776 ms 3236 KB
subtask1_8.txt AC 343 ms 4012 KB
subtask1_9.txt AC 497 ms 4388 KB
subtask1_sample_02.txt AC 28 ms 1140 KB