zoukankan      html  css  js  c++  java
  • 杂题记录

    本人太懒,但是遇到有意思的题又不想放过,所以下面只写思路没有代码。

    持续更新中

    最大最小

    就是问你有多少个区间满足区间最大值是区间最小值的两倍。

    乍一看不太可做,实际上是个二分。

    枚举左端点,右端点变大的过程中,区间最大值不会变小,区间最小值不会变大,\(\frac{区间最大值}{区间最小值}\)不会变小,具有二分性。

    HDU7073 Integers Have Friends

    题目大意:给你一个数组,从里面尽可能多的选数,使得他们模m同余(m>=2)。问你最多能选出来几个。

    这题竟然是随机化。。。

    如果我们选m=2,可以得到一个大小为n/2的较优解(不一定是最优解),所以可知最优解的大小>=n/2。

    我们随便选两个数,它们都在最优解里的概率>=1/4,不能同时在最优解的概率<=3/4,我们可以多选出来几对(假设是k对),这几对都同时不在最优解的概率<=\((\frac{3}{4})^k\),k足够大的时候\((\frac{3}{4})^k\),可以看似成0

    对于选出来的两个数,把他们的差质因数分解,分解出来的质数分别看作m,O(n)处理一边就行,取所有情况里面最大的集合就行。

    CF1548B Integers Have Friends

    题目大意:跟上面那个hud7073一样,不过这道题要求选的数是连续的

    既然是要求选的数连续的,我们就能想到用双指针。

    怎么找m?我之前有个比较nature的想法就是让所有的a减去\(a_1\),但很明显如果\(a_1\)如果不在最后的答案那个区间里的话这种做法是错误的。

    实际上只用设\(b_i=a_{i+1}-a_i\),把双指针放在b上,然后快速求个gcd就行,快速求gcd用线段树和st表都行。

  • 相关阅读:
    题解【51nod 1290 Counting Diff Pairs】
    题解【luogu3709 大爷的字符串题】
    数据库唯一索引冲突不抛出异常的两种方式
    git 查看远程分支最后一次提交时间
    Java占位符
    IntelliJ IDEA注册码
    git忽略本地文件
    ThreadPoolExecutor参数
    MyBatis是如何解决Sql注入的
    Java 泛型
  • 原文地址:https://www.cnblogs.com/wljss/p/15693185.html
Copyright © 2011-2022 走看看