二分答案经典入门题:)

LuoguP1024  一元三次方程求解

题目传送门

因为根与根之间的差不超过1,所以我们就可以分段枚举,又已知根的取值范围是[-100,100],于是就很简单啦QWQ

xiu~代码走起——

 1 #include<cstdio>
 2 double a,b,c,d;
 3 double count(double x){//计算函数值
 4     return a*x*x*x+b*x*x+c*x+d;
 5 }
 6 int main(){
 7     double l,r,mid,x1,x2;
 8     int tot=0,i;
 9     scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
10     for (i=-100;i<100;i++){
11         l=i;
12         r=i+1;//两根之间差值不超过1
13         x1=count(l);
14         x2=count(r);
15         if(x1==0){
16             printf("%.2lf ",l);
17             tot++;//记录根的数量,总共3个
18         }
19         if(x1*x2<0){
20             while(r-l>=0.001){//实数比较,相当于r>=l
21                 mid=(l+r)/2;
22                 if(count(mid)*count(r)<=0)
23                    l=mid;
24                 else
25                    r=mid;
26             }
27             printf("%.2lf ",r);
28             tot++;
29         }
30         if (tot==3)
31             break;
32     }
33     return 0;
34 }


LuoguP2678  跳石头

题目传送门

一看到求最小的最大就知道这是二分答案经典题。

直接二分枚举答案也就是最短跳跃距离,然后判断需要挪走的石头数量是否合法,恩就酱紫直接上代码吧

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int l,n,m,d[50002];
 4 int fr(){
 5     int w=0,q=1;
 6     char ch=getchar();
 7     while((ch<‘0‘||ch>‘9‘)&&ch!=‘-‘) ch=getchar();
 8     if(ch==‘-‘) q=-1;
 9     while(ch<=‘9‘&&ch>=‘0‘) w=w*10+ch-‘0‘,ch=getchar();
10     return w*q;
11 }
12 int maxn=0;
13 bool pd(int x){
14     int now=0,num=0,next=0;
15     while(next<n+1){
16         next++;
17         if(d[next]-d[now]<x)
18             num++;
19         else now=next;
20     }
21     if(num>m) return 0;//需要移走的石头数量>最多可以移走的石头数量则显然不合法
22     else return 1;
23 }
24 int main(){
25     l=fr();n=fr();m=fr();
26     for(int i=1;i<=n;i++)
27         d[i]=fr();
28     d[n+1]=l;//注意第n+1块石头的距离才是l
29     int L=1,R=l;//注意一下左右端点的初始值,要符合题目的要求
30     while(L<=R){
31         int mid=(L+R)/2;
32         if(pd(mid)){
33             L=mid+1;
34             maxn=mid;//记录最大的答案
35         }
36         else R=mid-1;
37     }
38     printf("%d",maxn);
39     return 0;
40 }

原文地址:https://www.cnblogs.com/THWZF/p/10368508.html

时间: 2024-10-11 03:17:03

二分答案经典入门题:)的相关文章

车厢调度(栈的经典入门题)

车厢调度 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 5   Accepted Submission(s) : 2 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 有一个火车站,每辆火车从A驶入,车厢可以停放在车站C中,或从B方向驶

SPOJ375 Query on a tree经典入门题

剖分边更新,线段树点更新区间求极值.学树链剖分感觉还是先做点更细的好,而不是边更新.其实最主要还用来维护的数据结构了,剖分基本上都成模板了. 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 #define lson l,m,rt<<1 6 #define rson m+1,r,rt<<1|1 7 const int m

二分答案 [TJOI2007]路标设置

本人水平有限,题解不到为处,请多多谅解 本蒟蒻谢谢大家观看 题目:https://www.luogu.org/problem/P3853 因为数据n<=10000000;通过样例分析即可得出这是一到二分题. 样例解析:将一段区间分成(k+n)段,找出(k+n)的一段最大值.因为k不确定,所以如何分也不确定,我们就是要找出这段最大值在整个若干次情况中与其余一段最大值比较,取这些里面最小的. 本题是一道二分答案的模板题,只需注意一下细节即可 code: #include<bits/stdc++.h

P1314 聪明的质监员[二分答案]

题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 nn 个矿石,从 11到nn 逐一编号,每个矿石都有自己的重量 w_i*w**i* 以及价值v_i*v**i* .检验矿产的流程是: 1 .给定mm个区间[L_i,R_i][Li,Ri]: 2 .选出一个参数WW: 3 .对于一个区间[L_i,R_i][Li,Ri],计算矿石在这个区间上的检验值Y_i*Y**i*: 这批矿产的检验结果YY 为各个区间的检验值之和.即:Y_1+Y_2...+Y_mY1+Y2...+*Y**

BZOJ 4590: [Shoi2015]自动刷题机 二分答案

4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1056  Solved: 380[Submit][Status][Discuss] Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写程序,每秒,自动刷题机的代码生成模 块会有两种可能的结果: A.写了x行代

二分答案入门乱讲

1.关于二分答案 如果reader没有学过二分,那么我建议您把这个网站关掉.不是我有偏见或者什么,看这篇文章对不了解二分的人来说没有好处. 对 于一些问题,它的解满足单调性,即如果x满足条件,则对于任意的 i ( 1<=i<=x) 或 (x <=i <=n) (假设1和n是答案的上下界)都会满足条件.一般遇上这种问题,我们就可以用二分答案来加快解决.这种问题常常有关键语句:使最大......最小. 对于上面的问题,在没学二分答案的时候,我们是这么写的:(假设答案是上界) for(i

【软帝学院】12道java经典入门算法题!

12道java经典入门算法题! [程序1]   题目:将一个数组逆序输出. 程序分析:用第一个与最后一个交换. 其实,用循环控制变量更简单: for(int k=11;k>=1;k--) System.out.print(myarr[k]+","); [程序2]   题目:取一个整数a从右端开始的4-7位. 程序分析:可以这样考虑: (1)先使a右移4位. (2)设置一个低4位全为1,其余全为0的数.可用~(~0 < <4) (3)将上面二者进行&运算. pu

12道java经典入门算法题!

12道java经典入门算法题![程序1] ? 题目:将一个数组逆序输出. ? 程序分析:用第一个与最后一个交换. ? 其实,用循环控制变量更简单:for(int k=11;k>=1;k--)System.out.print(myarr[k]+","); [程序2] ? 题目:取一个整数a从右端开始的4-7位. ? 程序分析:可以这样考虑: ? (1)先使a右移4位. ? (2)设置一个低4位全为1,其余全为0的数.可用~(~0 < <4) ? (3)将上面二者进行&a

HDU3081Marriage Match II(二分答案+并查集+最大流SAP)经典

Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2507    Accepted Submission(s): 856 Problem Description Presumably, you all have known the question of stable marriage match. A