1 条题解
-
0
暴力会超时,考虑二分。
二分的 到 的最大值。
check 函数中,如果 ,退出循环。否则计数器 cnt 增加 。
最后,别忘了将结构体数组排序。
#include <bits/stdc++.h> using namespace std; struct Tree{ int l,s; }a[10001]; int n,m; int l=1,r; bool check(int x){ int cnt=0; for (int i=1;i<=n;i++){ if (a[i].l<x){ break; } cnt+=a[i].l/x*a[i].s;//求出当前木材商能供应多少根长x的木头。 } return cnt>=m; } bool cmp(Tree x,Tree y){ return x.l>y.l; } int main(){ cin>>n>>m>>a[1].l>>a[1].s; r=a[1].l; for (int i=2;i<=n;i++){ a[i].l=((a[i-1].l*37011+10193)%10000)+1; a[i].s=((a[i-1].s*73011+24793)%100)+1; r=max(r,a[i].l); } sort(a+1,a+n+1,cmp);//别忘了排序!!! while (l<=r){ int mid=(l+r)>>1; if (check(mid)){ l=mid+1; }else{ r=mid-1; } } cout<<r; return 0; }
- 1
信息
- ID
- 558
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 96
- 已通过
- 48
- 上传者