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)
}