// #include<iostream>
// #include<iomanip>
// #include<cmath>
// #include<string.h>
// #include<string>
// #include <ctime>
// #include<cstdlib>
// #include<algorithm>
// #include<cstdio>
// using namespace std;
#include<iostream>
#include<iomanip>
#include<cmath>
#include<string.h>
#include<string>
#include<cstdlib>
#include<algorithm>
#include<cstdio>
using namespace std;
//p2249
// long long arr[1000000];
// long long n,m,q;
// long long find(long long x)
// {
// long long left = 1,right = n;
// while(left<right)
// {
// long long mid = (left+right)/2;
// if(arr[mid]<x)left = mid+1;
// else right = mid;
// }
// if(arr[left]==x)return left;
// return -1;
// }
// int main()
// {
// cin>>n>>m;
// for(int i =1;i<=n;i++)cin>>arr[i];
// for(int i =0;i<m;i++)
// {
// cin>>q;
// long long result = find(q);
// cout<<result<<' ';
// }
// }
//p1102
// 1.a = b+c
// 2.排序枚举所有a,二分找到对应的b+c区间
// long long arr[1000000];
// long long n,ans,c;
// int main()
// {
// cin>>n>>c;
// for(int i =0;i<n;i++)cin>>arr[i];
// sort(arr,arr+n);
// for(int i =0;i<n;i++)
// {
// ans+=upper_bound(arr,arr+n,arr[i]+c)-lower_bound(arr,arr+n,arr[i]+c);
// }
// cout<<ans;
// }
// p1873
// 1.判断高度为x是否可以达到木材需要
// 2.通过二分来遍历获得最大高度
// long long arr[10000000];
// long long n,m,ans;
// long long maxi =0;
// bool is_get(int high)
// {
// long long sum =0;
// for(int i =0;i<n;i++)
// {
// if(arr[i]>high)sum+=arr[i]-high;
// }
// if(sum>=m)return 1;
// else return 0;
// }
// long long find()
// {
// long long left = 0, right =maxi;
// while (left<right)
// {
// long long mid = (left+right+1)/2;
// if(is_get(mid))
// {
// left =mid;
// }
// else
// {
// right = mid-1;
// }
// }
// return left;
// }
// int main()
// {
// cin>>n>>m;
// for(int i =0;i<n;i++)
// {
// cin>>arr[i];
// if(arr[i]>maxi)maxi = arr[i];
// }
// ans = find();
// cout<<ans;
// }
//1024
// double ans,eps = 1e-4;
// double a,b,c,d;
// double f(double x)
// {
// double res = a*x*x*x+b*x*x+c*x+d;
// return res;
// }
// int main()
// {
// cin>>a>>b>>c>>d;
// for(int i =-100;i<=100;i++)
// {
// double left = i,right = i+1,mid;
// if(fabs(f(left))<eps)
// cout<<fixed<<setprecision(2)<<left<<' ';
// else if(fabs(f(right))<eps)continue;
// else if(f(left)*f(right)<0)
// {
// while((right-left)>eps)
// {
// mid = (right + left)/2;
// if(f(mid)*f(right)>0)right = mid;
// else left = mid;
// }
// cout<<fixed<<setprecision(2)<<left<<' ';
// }
// }
// }
//p1678
//函数输入分数获得最小不满
// int arr[100000];
// int n,m;
// long long ans;
// int min(int x)
// {
// int left = 0,right = n-1;
// while(left<right)
// {
// long long mid = (left+right+1)/2;
// if(arr[mid]<=x)
// {
// left = mid;
// }
// else right = mid-1;
// }
// return abs(arr[left]-x)<abs(arr[left+1]-x)?abs(arr[left]-x):abs(arr[left+1]-x);
// }
// int main()
// {
// cin>>n>>m;
// int item;
// for(int i =0;i<n;i++)cin>>arr[i];
// sort(arr,arr+n);
// for(int i =0;i<m;i++)
// {
// cin>>item;
// ans +=min(item);
// }
// cout<<ans;
// }
//p2240
//我直接判断是贪心
// 1.先从小到大排序
// 2.函数输入木头长度判断是否大于k
// 3.二分找到长度的最大值
// long long arr[10000000];
// long long n,k;
// bool is_k(long long len)
// {
// long long ans= 0;
// for(int i= 0;i<n;i++)
// {
// ans +=arr[i]/len;
// }
// return ans>=k;
// }
// int main()
// {
// cin>>n>>k;
// for(int i = 0;i<n;i++)cin>>arr[i];
// sort(arr,arr+n);
// long long left =0,right =0xffffffff;
// while (left<right)
// {
// long long mid = (left+right+1)/2;
// if(is_k(mid))
// {
// left = mid;
// }
// else right = mid-1;
// }
// cout<<left;
// }
// p2678
// 1.求最短距离的最大
// 2.找到一个和两边距离最小的石头,删掉它
// 3。函数输入距离判断要删掉多少石头
// 4.二分找到距离的最大值
// long long arr[1000000];
// long long b[1000000];
// long long l,n,m;
// bool is_m(long long dis)
// {
// long long count =0;
// for(int i =1;i<=n+1;i++)b[i] = arr[i];
// for(int i =1;i<=n+1;i++)
// {
// if(b[i]-b[i-1]<dis)
// {
// b[i] = b[i-1];
// count++;
// }
// }
// return count<=m;
// }
// int main()
// {
// cin>>l>>n>>m;
// for(int i =1;i<=n;i++)cin>>arr[i];
// arr[n+1] = l;
// long long left = 1,right = 0xffffffff;
// while (left<right)
// {
// long long mid = (left+right+1)/2;
// if(is_m(mid))
// left = mid;
// else right = mid-1;
// }
// cout<<left;
// }
// p3853
// 1.空旷指数在长度范围内,可以二分找到
// 2.空旷指数越大,设置路标数量越少
// 3.函数输入空旷指数,判断路标数量是否够少
// long long arr[1000000];
// long long b[1000000];
// long long n,k,l;
// bool is_k(long long len)
// {
// long long ans =0;
// for(int i =1;i<n;i++)
// {
// ans +=b[i]/len;
// if(b[i]%len==0)ans--;
// }
// return ans<=k;
// }
// int main()
// {
// cin>>l>>n>>k;
// for(int i =0;i<n;i++)cin>>arr[i];
// for(int i =1;i<n;i++)b[i] = arr[i]-arr[i-1];
// long long left = 1,right = 0xffffffff;
// while (left<right)
// {
// long long mid = (left+right)/2;
// if(is_k(mid))
// right = mid;
// else left = mid +1;
// }
// cout<<left;
// }
// p1182
// 1.最大值的最小在和的范围内,可以二分
// 2.趋势:最大值越大,划分的次数就越少
// 3.函数:输入最大值,小于等于划分次数
// (有一个点不知道错哪了)
// long long arr[10000000];
// long long n,m;
// bool is_m(long long len)
// {
// int ans = 0;
// long long sum =0;
// for(long long i =0;i<n-1;i++)
// {
// sum+=arr[i];
// if(sum+arr[i+1]>len)
// {
// sum =0;
// ans++;
// }
// }
// ans++;
// return ans<=m;
// }
// int main()
// {
// cin>>n>>m;
// for(long long i =0;i<n;i++)cin>>arr[i];
// long long left = 1,right = 0xffffffff;
// while (left<right)
// {
// long long mid = (left+right)/2;
// if(is_m(mid))
// right = mid;
// else left = mid +1;
// }
// cout<<left;
// }
// p1163
洛谷——《二分查找和二分答案》
最新推荐文章于 2024-07-09 21:01:01 发布