1 条题解
-
0
qkw:
#include<bits/stdc++.h> using namespace std; #define N 100010 const double eps=1e-6; double a[N],b[N];pair<int,int>c[N];int n,m,f; bitset<N>bt,bt1; bool pd(double L) { bt1.reset(); for(int i=1;i<=n;i++)c[i].first=a[i]-L*b[i],c[i].second=i; sort(c+1,c+n+1); double sum=f-L*m; for(int i=n;i>=1;i--) { if(sum>=0) { bt=bt1; return 1; } bt1[c[i].second]=1; if(c[i].first<0)return 0; sum+=c[i].first; } if(sum>=0) { bt=bt1; return 1; } return 0; } int main() { scanf("%d%d%d",&f,&m,&n);double l=0,r=f/m; for(int i=1;i<=n;i++)scanf("%lf%lf",&a[i],&b[i]),r=max(r,a[i]/b[i]); while(fabs(r-l)>eps) { double mid=(l+r)/2; if(pd(mid))l=mid+eps; else r=mid-eps; } if(bt.count()==0)puts("NONE"); else for(int i=1;i<=n;i++)if(bt[i])cout<<i<<endl; return 0; }
- 1
信息
- ID
- 1636
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 45
- 已通过
- 16
- 上传者