时间没安排好,最后因为边界问题,提交的代码也没通过用例成功。结束五分钟后,才调成功,以下代码仅供参考,还不知道会不会超内存。求Go的工作!!!
package main
import "fmt"
func main() {
var n, m int
fmt.Scan(&n, &m)
temp := make([]int, n)
for i := 0; i < n; i++ {
fmt.Scan(&temp[i])
}
flag := 0
maxIndex := findMax(temp, n)
// fmt.Println(maxIndex) // 输出测试
solve(temp, maxIndex, m, n, flag) // n+1 为A, n+2为B
for i := 0; i < n; i++ {
if temp[i] == n+1 {
fmt.Print("A")
} else {
fmt.Print("B")
}
}
}
func solve(temp []int, index, m, n, flag int) {
if index == 111111 {
return
}
count := m
// fmt.Println(index) // 输出测试
// fmt.Println(temp) // 输出测试
tempIndex := index
for tempIndex >= 0 && count >= 0 { // 这里count不能大于0,要大于等于0。index>=0
if temp[tempIndex] <= n {
temp[tempIndex] = n + flag + 1
tempIndex--
count--
} else {
tempIndex--
}
}
count = m
tempIndex = index + 1
for tempIndex < n && count > 0 { // 右边就不能count再多一次了
if temp[tempIndex] <= n {
temp[tempIndex] = n + flag + 1
tempIndex++
count--
} else {
tempIndex++
}
}
if flag == 0 {
flag = 1
} else {
flag = 0
}
maxIndex := findMax(temp, n)
solve(temp, maxIndex, m, n, flag)
}
func findMax(temp []int, n int) int { // 返回数组中最大值所在的位置
mt := 0
res := 111111
for i := 0; i < len(temp); i++ {
if temp[i] <= n && temp[i] > mt {
mt = temp[i]
res = i
}
}
return res
}
测试用例: 输入:
10 2
4 8 9 10 7 6 5 3 2 1
输出:
BAAAAABBBA
输入:
7 1
3 6 1 7 2 5 4
输出:
BBAAABA
#思科#