package main import ( "bufio" "fmt" "io" "os" "strconv" "strings" aoc "go.sour.is/advent-of-code" ) /* * Complete the 'cookies' function below. * * The function is expected to return an INTEGER. * The function accepts following parameters: * 1. INTEGER k * 2. INTEGER_ARRAY A */ func cookies(k int32, A []int32) int32 { var i int32 // fmt.Println(" ", A) // sort.Slice(A, func(i, j int) bool { return A[j] < A[i]}) // for A[len(A)-1] < k { // if len(A) < 2 { // return -1 // } // // fmt.Println(" ", A[len(A)-1], " + 2x", A[len(A)-2], 2*A[len(A)-2] + A[len(A)-1]) // A[len(A)-2] = 2*A[len(A)-2] + A[len(A)-1] // A = A[:len(A)-1] // for j:=len(A)-1; j>0 && A[j] > A[j-1]; j-- { // A[j], A[j-1] = A[j-1], A[j] // } // i++ // fmt.Println("A", len(A), i) // } pq := aoc.FibHeap(func(a, b *int32) bool { return *a < *b }) for i := range A { pq.Insert(&A[i]) } for !pq.IsEmpty() && *pq.GetMin() < k { first := *pq.ExtractMin() second := *pq.ExtractMin() third := first + 2*second pq.Insert(&third) i++ } return i } func main() { reader := bufio.NewReaderSize(os.Stdin, 16*1024*1024) stdout, err := os.Create("/dev/stderr") checkError(err) defer stdout.Close() writer := bufio.NewWriterSize(stdout, 16*1024*1024) firstMultipleInput := strings.Split(strings.TrimSpace(readLine(reader)), " ") nTemp, err := strconv.ParseInt(firstMultipleInput[0], 10, 64) checkError(err) n := int32(nTemp) kTemp, err := strconv.ParseInt(firstMultipleInput[1], 10, 64) checkError(err) k := int32(kTemp) ATemp := strings.Split(strings.TrimSpace(readLine(reader)), " ") var A []int32 for i := 0; i < int(n); i++ { AItemTemp, err := strconv.ParseInt(ATemp[i], 10, 64) checkError(err) AItem := int32(AItemTemp) A = append(A, AItem) } result := cookies(k, A) fmt.Fprintf(writer, "%d\n", result) writer.Flush() } func readLine(reader *bufio.Reader) string { str, _, err := reader.ReadLine() if err == io.EOF { return "" } return strings.TrimRight(string(str), "\r\n") } func checkError(err error) { if err != nil { panic(err) } }