首页 > 其他分享 >整数二分 ——洛谷p9240冶炼金属

整数二分 ——洛谷p9240冶炼金属

时间:2024-11-01 14:59:40浏览次数:4  
标签:二分 洛谷 int rmax mid lmax p9240 lmin check

#include<bits/stdc++.h>
#define endl '\n'
#define INF0x3f3f3f3f
#define int long long
using namespace std;
const int N =1e4 + 10;
int a[N],b[N];
int n;

//找左节点
bool check_min(int mid)
{
for(int i = 0;i < n ; i++)
{
if(b[i]<a[i]/mid)
return false;
}
return true;
}

//找右节点
bool check_max(int mid)
{
for(int i = 0 ; i < n ; i ++)
{
if(b[i] > a[i]/mid)
return false;
}
return true;
}

//---------------------------
void solve()
{
cin>>n;
for(int i = 0 ; i < n ; i ++)
cin>>a[i]>>b[i];
int lmin=1 ,rmin= 1e9;

//后面是二分模版
while(lmin<rmin)
{
int mid = lmin + rmin>>1;
if(check_min(mid))
rmin = mid;
else
lmin = mid +1;
}
int lmax = 1 , rmax = 1e9;
while(lmax<rmax)
{
int mid = lmax + rmax +1>>1;//这里如果写lmax+rmax 会陷入死循环,在最下面解释。
if(check_max(mid))
lmax=mid;
else
rmax= mid -1;
}
cout<<lmin<<" "<<lmax;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
t = 1 ;
while(t--)
solve();
}

//假设 mid = l+r/2

当 l = r -1 时,

mid = ((r-1)+r)/2 =r-0.5=r-1

由于c/c++是向下取整

接下来代码 lmax = mid(l) 

就又会让 lmax = mid = lmax;从而陷入死循环  

 

标签:二分,洛谷,int,rmax,mid,lmax,p9240,lmin,check
From: https://www.cnblogs.com/ganl/p/18520258

相关文章

  • 洛谷题单指南-字符串-P3369 【模板】普通平衡树
    原题链接:https://www.luogu.com.cn/problem/P3369题意解读:平衡树的基本操作,模版题。解题思路:1、二叉搜索树-BST二叉搜索树满足这样的性质:每一个节点的权值大于它的左儿子,小于它的右儿子。对BST进行中序遍历,将得到一个从小到大的有序序列,因此BST是为了维护一个有序序列的动态......
  • 题解 洛谷 Luogu P1308 [NOIP2011 普及组] 统计单词数 C++
    题目传送门:P1308[NOIP2011普及组]统计单词数-洛谷|计算机科学教育新生态https://www.luogu.com.cn/problem/P1308getline() 会清除使当次getline() 终止的换行,而cin 不会因此cin 以换行终止,之后还需要getline()的话,需要用getchar() 吞换行Linux的一些相......
  • 洛谷 P2606 [ZJOI2010] 排列计数 题解
    题目链接[ZJOI2010]排列计数-洛谷题解看到\(p_i>p_{\lfloori/2\rfloor}\)这个条件,可能一开始不会有什么想法。但是如果我们换种写法,即:\(p_i<p_{2i}\landp_i<p_{2i+1}\)。这样我们就能很容易看出来,这是小根堆的形式。现在我们从根节点开始考虑,假设左子树的大小......
  • 洛谷B2064
    B2064斐波那契数列-洛谷|计算机科学教育新生态斐波那契数列题目描述斐波那契数列是指这样的数列:数列的第一个和第二个数都为$1$,接下来每个数都等于前面$2$个数之和。给出一个正整数$a$,要求斐波那契数列中第$a$个数是多少。输入格式第1行是测试数据的组数n,后面......
  • arc186a 二分图 建模
    先直接给出思路,把这个矩阵建成一个完全二分图,如果\(a_{i,j}=1\)的话从左边的i连向右边的j,否则从右边的j连向左边的i,此时左边\(i\)的出度表示第\(i\)行的\(1\)的个数,右边\(j\)的出度表示第\(j\)列1的个数。我们发现,如果图中存在一个环,那么将环上的边全部翻转所有点的度数依然不变,但......
  • 洛谷Python顺序结构题解合集
    P5705【深基2.例7】数字反转a=s[0]b=s[1]c=s[2]d=s[4]print(f"{d}.{c}{b}{a}")P5706【深基2.例8】再分肥宅水ans=float(a[0])/int(a[1])beizi=2*int(a[1])print(f"{ans:.3f}\n{beizi}")P5708【深基2.习2】三角形面积p=0.5*(a+b+c)ans=pow((p*(p-a)*(p-b)*(p-c)),0.5......
  • 二分 & 三分
    二分查找多用于dp优化源码//自己写的时候推荐把边界放宽一点while(r-l>1){ //最后一个小于k的位置 intmid=l+r>>1; if(a[mid]<x)l=mid; elser=mid-1;}if(a[r]<x)l=r;STL库函数注意以下返回的都是指针#include<algorithm>upper_bound(a+1,a+n+1,k) //第一个大......
  • 【优选算法】——二分查找!
    目录1、二分查找2、在排序数组中查找元素的第一个和最后一个位置3、搜索插入位置4、x的平方根5、山脉数组的封顶索引6、寻找峰值 7、寻找旋转排序数组中的最小值8、点名9、完结散花1、二分查找给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 targ......
  • POI2011/洛谷P3523 DYN-Dynamite
    前言Link本来一个很直观的题面,非要搞形式化题意反而使题意变得非常迷惑。题意有一栋树形建筑,其中有一些点摆放了TNT,树边上都摆放了引信,引信的燃烧时间为\(1\)秒\(/\)边,现在你要选择\(m\)个点同时点燃引信(起爆),则显然TNT被引爆的时间为到离它最近的起爆处的距离,请你求......
  • POI2011/洛谷P3514 LIZ-Lollipop
    前言典中典思维蓝题难度薄纱模板水紫捏。\(1\)\(2\)序列这种也不是第一次见了,感觉多多少少都沾点Ad-hoc。话说这种考法真的好吗,一上来就是一个门槛很高的性质,推出来就满分,推不出来就\(0\)分,正推和反推的难度完全不是一个思维量级。题意Link给一个只有\(1\)和\(2\)......