package main import ( "bufio" "container/list" "fmt" "os" "strconv" "strings" ) func main() { // 读取两行 scanner := bufio.NewScanner(os.Stdin) var C []int var G list.List // 读第一行:补给舰能量 if !scanner.Scan() { fmt.Println(-1) return } line1 := strings.TrimSpace(scanner.Text()) if line1 == "" { fmt.Println(-1) return } parts1 := strings.Fields(line1) for _, s := range parts1 { x, err := strconv.Atoi(s) if err != nil || x < 1 || x > 100 { fmt.Println(-1) return } C = append(C, x) } // 读第二行:作战舰需求 if !scanner.Scan() { fmt.Println(-1) return } line2 := strings.TrimSpace(scanner.Text()) if line2 == "" { fmt.Println(-1) return } parts2 := strings.Fields(line2) for _, s := range parts2 { x, err := strconv.Atoi(s) if err != nil || x < 1 || x > 100 { fmt.Println(-1) return } G.PushBack(x) } var C_lenght, G_lenght = len(C), G.Len() var success int = 0 var test int = 0 // 单个补给舰在“需求不足”时的尝试次数,不能大于此时的战舰总数 for i:=0; i < C_lenght ;i++{ if G.Len() > 0 { if G.Front().Value.(int) == C[i] { // “精准补给” G.Remove(G.Front()) success++ test =0 } else if G.Front().Value.(int) < C[i] { // “超额补给” max := G.Front().Value.(int) G.Remove(G.Front()) success++ for G.Len() > 0 && max +G.Front().Value.(int) <= C[i] { max += G.Front().Value.(int) G.Remove(G.Front()) success++ } test =0 }else { if test < G.Len() { // 已重试次数不大于当前战舰数量 G.PushBack(G.Front().Value.(int)) G.Remove(G.Front()) i-- // 重试 test++ // 重试次数+1 } else { test = 0 // 当前补给舰无法进行有效的分配,跳过当前补给舰 } } }else { break // 战舰都补给完 } } fmt.Println(G_lenght - success) }