効率よく盗もう (paizaランク A 相当) 

今回は模範解答を見ないで問題を解くことができませんでした。pythonコードの模範解答はなかったので、こちらに載せておきます。

問題を解くには、平均価値がx以上となる計算式を用いて左辺に移行し、その式を満足する条件を満たす配列をソートしてk個取り出すことができるか、という問題として解きます。

vwという配列に、条件を満たす式「v[x]-平均価値*w[x]」を各配列ごとに計算して格納します。その後、配列vwをそーとし、与えられたk個の配列を大きい方から合計(sum(vw[n-k:]))が「0」以上となることで判別しています。

# coding: utf-8
# 自分の得意な言語で
# Let's チャレンジ!!
n,k = [int(x)for x in input().split()]
w=[int(x)for x in input().split()]
v=[int(x)for x in input().split()]
left=0
right=5001
for i in range(100):
    ans=0
    vw=[]
    mid=(left+right)/2
    for x in range(n):
        vw.append(v[x]-mid*w[x])
    vw.sort()
    ans=sum(vw[n-k:])
    if ans>=0:
        left=mid
    else:
        right=mid

print(left)