文章目录
- 回顾
- 前言
- 代码
- 思路
回顾
- A+B III
- 问题 H: 三角数
- 问题 G: 3个数
- 等式 数组下标查询,降低时间复杂度
- 1405 问题 E: 世界杯
- xtu 数码串
- xtu oj 神经网络
- xtu oj 1167 逆序数(大数据)
- xtu oj 原根
- xtu oj 不定方程的正整数解
- xtu oj 最多的可变换字符串
- xtu oj String I
- xtu oj 字母序列
- xtu oj 分段
- xtu oj 完全平方数II
- xtu oj 连接字符串
- xtu oj 2021
- xtu oj 数字
- xtu oj 删除
- xtu oj 聚会
- xtu oj Distance
前言
好久没写 oj 题了,哈哈哈。
代码
#include<stdio.h>
#include<stdbool.h>
#define N 1010
int n,m;
int a[N],b[N];//就是按照题意写的数组
bool check(long long mid){//mid 表示的是药材的数量,也就是要求的答案int remain=m;//剩余的位置for(int i=0;i<n;i++){//遍历每一种成分long long temp=(a[i]*mid+b[i]-1)/b[i];//每一种成分需要的位置,注意向上取整,向上取整的原理见图片if(temp>remain){//向上取整的原因是我们合成一种药材成分只能多,不能少return false;//假设没有位置可以种药了,就表示这个答案不对}remain-=temp;//更新剩余的位置}return true;
}
int main(){int t;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(int i=0;i<n;i++){scanf("%d",&a[i]);}for(int i=0;i<n;i++){scanf("%d",&b[i]);}//前面都是输入long long l=0,r=1e9;while(l<r){long long mid=(l+r+1)/2;//笔者感觉求稍微大点的答案用这个模板,稍微小点的答案用 l+r>>1 这个模板if(check(mid)){l=mid;}else{r=mid-1;}}printf("%lld\n",l);}return 0;
}
思路
二分答案,记录一下,我现在发现一些题可能有时候弄清楚之后,之后过一段时间再写可能还是不会写。呜呜。可能这就是记录的意义。还有一些痕迹可以寻找到,不然记忆就像是消磁了一样。