#include<bits/stdc++.h>
using namespace std;
double a[1000],b[1000];
bool mark[1000];
vector<int> v,sorta;
//keep index
bool compare(int tmpa,int tmpb){
if(b[tmpa]<b[tmpb]) return true;
if(b[tmpb]<b[tmpa]) return false;
if(a[tmpa]>a[tmpb]) return true;
return false;
}
bool cp(int tmpa,int tmpb){
if(a[tmpa]<a[tmpb]) return true;
return false;
}
int main(){
int n,k;
cin>>n >>k;
for(int i=1;i<=n;i++){
cin>>a[i] >>b[i];
sorta.push_back(i);
if(b[i]!=-1) v.push_back(i);
}
sort(v.begin(),v.end(),compare);
sort(sorta.begin(),sorta.end(),cp);
int mx=v.size();
mx=min(mx,k);
double ans=INT_MAX;
for(int use=0;use<=mx;use++){
for(int i=1;i<=n;i++) mark[i]=false;
double cand=0,pow=1;
for(int i=0;i<use;i++){
int ind=v[i];
mark[ind]=true;
cand+=b[ind]/pow;
pow++;
}
int left=k-use,cnt=0,nowind=0;
while(cnt<left){
int ind=sorta[nowind];
if(mark[ind]){
nowind++;
continue;
}
cand+=a[ind]/pow;
nowind++;
cnt++;
}
ans=min(ans,cand);
}
cout<<fixed <<setprecision(7) <<ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |