• 二分 三分


    第一讲
    C语言,C++,jave
     • 输入
      while(~scanf("%d",&n)){}
      scanf("%[^ ]",s);//读入一行
      scanf("[0-9]",s);//读入字符串0-9 读到不是0-9停下  ^不读0-9
      
      sort(a,a+n,cmp)//no cmp 默认从小到大 o(lognn)
       a.begin(),a.end()
       int cmp(int x,int y)
       {
        return y>x;
       }
       //using namespace std
      unique(a,a+n)//
       得到数组中不重复的元素
       int m=unique(a,a+n)-a;//保证数组有序才能用unique o(n)
       
      Jave 高精度 进制转换 时限:2倍/3倍
       Import jave.io.*;
       Import jave.util.*;
       Public class main
       {
       
       }
       Hasnext()
       Nextint()
       Next()//读入字符串
       Nextline()
       Nextbiginteger()
       
       System.out.printin()
       DecimalFormat
     • 二分
      左右两个部分 0(lognn)
      Int bi(int l,int r)
      {
       While(r-l>1)
       {
        Int mid=(l+r)/2;
        If(check(mid)) l=mid;
        Else R=mid;
       }
       Return  mid;
      }
      //lower.bound
       Eg2: 找上标和下标
        Upper_bound(a,a+n,b);
        Lower_bound(a,a+n,b);//得先排序
       Eg3:给定长度为你=n的数组,从每一个里面选取一个值。问有多少种方法使四个值和为0.n<4000(*)
        加起来两个n*n 然后枚举 o(n*n*logn)
       Eg3:给定一个2维数据,上<下,左<右,查找x(*)
        1每一行或每一列(小的那个)二分查找 o(min(n,m)*logn)
        2从右上角来查找 大往下,小往左 o(m+n)
       Eg4:给定数组 找到一个位置使得他相邻的两个位置的值都比当前位置小。A[0]=a[n+1]=负无穷(**)
        1简化为差分数组
         2mid&mid+1
       Eg5:可能被旋转的单调递增数组直接,求最小值([1 2 3 4 5]-->[4 5 1 2 3]整体右移后面的拿到前面来)(***)
       
       
       
       
        直接中间来
     二分答案(最小值最大 最大值最小)
       Eg1: n个石头 给了到起点的距离。问要去掉n个中m个使其间距值最小值最大(**)
        知道间距 判断去m个使任意两个间距大于等于间距 二分答案
       Eg2:每件衣服有一定水量,有烘干机可以烘干一件衣服,1min可以烘干k件衣服。每件衣服每分钟可以自动蒸发一滴水,用烘干机使不蒸发。最少时间(**)
        给时间看是否能烘干 先烘干最湿的 二分???
       Eg3: n个物品,每个物品有属性A&B 选k个物品,使a值之和除以b值之和最大 n<10^6(**)//零一分数规划
        Sum(a) / sum(b)>=mid--> sum(a)-sum(b)*mid>=0
         每次mid重新排序选取前k个
         数据太大卡掉了
        采用函数 nth_element(a,a+n,k) 把前k大的值放在了前k个位置但不是排序 o(n)//快排!!了解一下这个函数
     • 三分
      类似二分定义left right
      mid=(l+r)/2
      midmid=(m+r)/2
      If mid 靠近极值点 r=midmid
      Else l=mid
      
      (L+l+r)/3
      (l+R+R)/3
      
      L+(R-L)*0.382
      L+(R-L)*0.618
      
      Eg1: n个开口向上的二次函数,max中的最小值(**)
       //还是单峰函数???
      Eg2:poor为这个区间和的绝对值 weakness等于所有区间最大的poorness 求x使得,序列A全部减x后weakness最小(***)
       x增大weakness减小--> x减小weakness增大
      Eg3:给整数x 求(x+x^2+……+x^y)%p; x,y<10^9;p>10^9(***)
       等比数列公式&求逆元??
       x也可换为矩阵a
       (x+x^2+x^3)*(1+x^3)
      Eg4: n为大整数,求™的乘积,复杂度小于0(n^2)
       T(n)=4T(n/2)+o(n)
       T(n)=????
      Eg5: n个物品体积和价值 容量v 选取不超过k个物品 n<500 v<10000(****)
       WSQ二分加一个x去控制物品数量
      Eg6:n个村庄 给出每个村庄的坐标。要在这条直线上选k个地方建雕塑,使得每个村庄到离其最近的雕塑的距离的和最小,输出最小的和 n<1e5(*****)
      
      
     • 问题
      ○ 测试a java
      ○ 测试c
      ○ 测试d 二分答案
      ○ 测试e 三分
      ○ 测试g
      ○ 测试j  floyd

  • 相关阅读:
    【git】git命令集合
    【maven】【IDEA】idea中使用maven编译项目,报错java: 错误: 找不到符号 【2】
    【mybatis】mybatis传参的几种方式
    【EasyExcel】使用easyExcel过程中,项目报错的解决集合
    【Maven】【IDEA】在idea中开发web项目,解决maven的jar包冲突的方法
    【Easyexcel】java导入导出超大数据量的xlsx文件 解决方法
    【maven】idea的pom文件修改,引入新的jar包,无效,本地仓库始终没有下载新jar包的问题解决【idea pom Dependency not found】
    【java】javac编译多个有依赖关系的java文件为class文件
    【java】javac命令在win10不可用,提示javac不是内部或外部命令,也不是可运行的程序【解决方法】
    【POI】java服务生成List数据集合,后台服务生成xlsx临时文件,并将临时文件上传到腾讯云上,并实现xlsx浏览器预览
  • 原文地址:https://www.cnblogs.com/lllllllm/p/12186311.html
Copyright © 2020-2023  润新知