本题思路简单,概括起来讲就是输入,排序,动态规划,输出
1.输入部分,go如果用Scanf读入会超时,用bufio不会超时,但是在string转int时由于精读问题会出错
2.排序没什么好讲的,一般都有封装的方法sort,当然自己排也没问题,但要注意效率
3.这一部分是本题的关键点,其实就是在排序完的序列中,求最长的子序列满足M<=mp,我这里用pSum表示前一个最长的len,sum表示最长的len
下面的代码有一个第4个测试点超时,如果换成bufio不超时,但是转换会出错。很尴尬,所以最后为了AC我用c语言实现了一遍。
package main
import (
"fmt"
"sort"
)
func main() {
var N, p int
var number []int
_, _ = fmt.Scanf("%d %d", &N, &p)
number = make([]int, N)
for i:=0; i<N; i++ {
_, _ = fmt.Scanf("%d", &number[i])
}
sort.Ints(number)
pSum, sum := 0, 0
for i:=0; i<N; i++ {
if number[i] <= number[i - pSum] * p {
sum = pSum + 1
}
pSum = sum
}
fmt.Println(pSum)
}