Я написал два решения одной и той же простой задачи для Google Kickstart. Это принципиально одно и то же решение. Ссылка на проблему this . Я представил два решения, сначала в go, а затем python. Но решение python выполнено правильно, в котором решение go имело TLE. Я разделяю оба кода. Буду признателен за отзыв об ошибке.
Go:
package main
import (
"fmt"
"sort"
)
func main() {
var N int
fmt.Scan(&N)
for i := 1; i <= N; i++ {
var house, budget int
fmt.Scan(&house, &budget)
prices := make([]int, house)
for j := 0; j < house; j++ {
fmt.Scan(&prices[j])
}
sort.Ints(prices)
j := 0
for ; j < house; j++ {
if prices[j] > budget {
break
}
budget -= prices[j]
}
fmt.Printf("Case #%d: %d\n", i , j)
}
}
Обновленное решение go с улучшенной временной сложностью O (n):
package main
import (
"fmt"
)
func main() {
var N int
fmt.Scan(&N)
for i := 1; i <= N; i++ {
var house, budget int
fmt.Scan(&house, &budget)
prices := make([]int, 1000)
for j, val := 0, 0; j < house; j++ {
fmt.Scan(&val)
prices[val-1]++
}
count := 0
for j := 0; j < 1000; j++ {
if prices[j] == 0 {
continue
}
cost := prices[j] * (j + 1)
if budget >= cost {
budget -= cost
count += prices[j]
} else {
c := budget / (j + 1)
count += c
break
}
}
fmt.Printf("Case #%d: %d\n", i, count)
}
}
Python:
N = int(input())
for i in range(1, N + 1):
house, budget = map(int, input().split())
prices = list(map(int, input().split()))
prices.sort()
j = 0
for price in prices:
if price > budget:
break
budget -= price
j += 1
print("Case #", i, ": ", j, sep='')