1 条题解
-
0
自动搬运
来自洛谷,原作者为

Drinkkk
**搬运于
2025-08-24 21:56:02,当前版本为作者最后更新于2018-01-07 12:28:12,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
分思路:我们先模拟每棵树树每个月的高度,再看看这个数的高度是否大于或等于,如果是就将当前截下的木材长度加上,然后将这棵树的高度减去即可,如果我们假设当前已经截下的木材长度为,且现在是第个月的话,那么当时就要打印并跳出循环了。
分思路:我们先模拟每棵树树每个月的高度,再看看这个数的高度是否大于或等于,如果是就将当前截下的木材长度加上,然后将这棵树的高度设为即可,如果我们假设当前已经截下的木材长度为,且现在是第个月的话,那么当时就要打印并跳出循环了。
分思路:在模拟每棵树的高度之前我们需要先判断一下在第个月时可否完成订单,若能够完成订单就输出,否则就继续循环枚举。
分思路:将我们的程序里的所有类型的变量都转化为 类型的。因为。
分思路:使用二分查找,将设为,且将设为∞,这样就是⌊⌋。那么,在第个月时,'=,统计一下在第个月是能否完成订单即可,若能够完成订单就将,否则就将,当时进行循环,所以最终的答案就是,如果你还不明白什么是二分查找下面将给出一个的例子,其中浅绿色的格子代表,深绿色的格子代表,黄色的格子代表将要查找的点,浅蓝色的格子代表。

分思路:将程序内的所有 转化为 即可,其余同分思路。
分思路:先将设为,再将'设为',即可,再将所有的转化为 即可。其余同分思路。
分代码:
#include <cstdio> int h[1000001],a[1000001]; int main() { int ans=0,n=0,x=0,y=0; scanf("%d %d %d",&n,&x,&y); for(int i=1;i<=n;i++) { scanf("%d",&h[i]); } for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } while(++ans) { for(int i=1;i<=n;i++) { h[i]+=a[i]; if(h[i]>=y) { x-=y; h[i]-=y; } } if(x<=0) { break; } } printf("%d",ans); return 0; }分代码:
#include <cstdio> int h[1000001],a[1000001]; int main() { int ans=0,n=0,x=0,y=0; scanf("%d %d %d",&n,&x,&y); for(int i=1;i<=n;i++) { scanf("%d",&h[i]); } for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } while(++ans) { for(int i=1;i<=n;i++) { h[i]+=a[i]; } int da=0; for(int i=1;i<=n;i++) { if(h[i]>=y) { da+=h[i]; } } if(da>=x) { break; } } printf("%d",ans); return 0; }分代码:
#include <cstdio> int h[1000001],a[1000001]; int main() { int ans=0,n=0,x=0,y=0; scanf("%d %d %d",&n,&x,&y); for(int i=1;i<=n;i++) { scanf("%d",&h[i]); } for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } int da=0; for(int i=1;i<=n;i++) { if(h[i]>=y) { da+=h[i]; } } if(da>=x) { printf("0"); return 0; } while(++ans) { for(int i=1;i<=n;i++) { h[i]+=a[i]; } int da=0; for(int i=1;i<=n;i++) { if(h[i]>=y) { da+=h[i]; } } if(da>=x) { break; } } printf("%d",ans); return 0; }分代码:
#include <cstdio> long long h[1000001],a[1000001]; int main() { long long ans=0,n=0,x=0,y=0; scanf("%lld %lld %lld",&n,&x,&y); for(long long i=1;i<=n;i++) { scanf("%lld",&h[i]); } for(long long i=1;i<=n;i++) { scanf("%lld",&a[i]); } long long da=0; for(long long i=1;i<=n;i++) { if(h[i]>=y) { da+=h[i]; } } if(da>=x) { printf("0"); return 0; } while(++ans) { for(long long i=1;i<=n;i++) { h[i]+=a[i]; } long long da=0; for(long long i=1;i<=n;i++) { if(h[i]>=y) { da+=h[i]; } } if(da>=x) { break; } } printf("%lld",ans); return 0; }分代码:
#include <cstdio> long long h[1000001],a[1000001]; int main() { long long ans=0,l=0,r=0,n=0,x=0,y=0; scanf("%lld %lld %lld",&n,&x,&y),r=999999999; for(long long i=1;i<=n;i++) { scanf("%lld",&h[i]); } for(long long i=1;i<=n;i++) { scanf("%lld",&a[i]); } long long da=0; for(long long i=1;i<=n;i++) { if(h[i]>=y) { da+=h[i]; } } if(da>=x) { printf("0"); return 0; } long long nh[200001]; while(r-l>1) { long long mid=(l+r)/2; for(long long i=1;i<=n;i++) { nh[i]=h[i]+mid*a[i]; } long long da=0; for(long long i=1;i<=n;i++) { if(nh[i]>=y) { da+=nh[i]; } } if(da>=x) { r=mid; } else { l=mid; } } printf("%lld",r); return 0; }分代码:
#include <cstdio> unsigned long long h[1000001],a[1000001]; int main() { unsigned long long l=0,r=0,n=0,x=0,y=0; scanf("%llu %llu %llu",&n,&x,&y),r=999999999; for(unsigned long long i=1;i<=n;i++) { scanf("%llu",&h[i]); } for(unsigned long long i=1;i<=n;i++) { scanf("%llu",&a[i]); } unsigned long long da=0; for(unsigned long long i=1;i<=n;i++) { if(h[i]>=y) { da+=h[i]; } } if(da>=x) { printf("0"); return 0; } unsigned long long nh[200001]; while(r-l>1) { unsigned long long mid=(l+r)/2; for(unsigned long long i=1;i<=n;i++) { nh[i]=h[i]+mid*a[i]; } unsigned long long da=0; for(unsigned long long i=1;i<=n;i++) { if(nh[i]>=y) { da+=nh[i]; } } if(da>=x) { r=mid; } else { l=mid; } } printf("%llu",r); return 0; }分代码:
#include <cstdio> unsigned long long h[1000001],a[1000001]; unsigned long long min(unsigned long long x,unsigned long long y) { return x<y?x:y; } unsigned long long max(unsigned long long x,unsigned long long y) { return x>y?x:y; } int main() { unsigned long long now=0,l=0,r=0,n=0,x=0,y=0; scanf("%llu %llu %llu",&n,&x,&y),now=r=max(x,y); for(unsigned long long i=1;i<=n;i++) { scanf("%llu",&h[i]); } for(unsigned long long i=1;i<=n;i++) { scanf("%llu",&a[i]); r=min(r,(now-h[i])/a[i]+1); } unsigned long long da=0; for(unsigned long long i=1;i<=n;i++) { if(h[i]>=y) { da+=h[i]; } } if(da>=x) { printf("0"); return 0; } unsigned long long nh[200001]; while(r-l>1) { unsigned long long mid=(l+r)/2; for(unsigned long long i=1;i<=n;i++) { nh[i]=h[i]+mid*a[i]; } unsigned long long da=0; for(unsigned long long i=1;i<=n;i++) { if(nh[i]>=y) { da+=nh[i]; if(da>=x) { break; } } } if(da>=x) { r=mid; } else { l=mid; } } printf("%llu",r); return 0; }
- 1
信息
- ID
- 3020
- 时间
- 1000ms
- 内存
- 500MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者