• csp-s模拟测试 56~65


    csp-s模拟测试 56

    A. Merchant

    对于一个确定的集合,只可能是先减后增、单调增、>0部分的单调减

    减的最优出现在0,check下

    没有就直接二分值域,对于x,选出最大的m个函数值验证。

    nth_element可以做到O(n)

    B. Equation

    式子可以化成与自身和x1有关,分奇偶讨论x1前的符号。

    边的贡献在其子树,BIT维护dfs序差分前缀和,区间修改,单点查询(get祖先链上的信息)。

    C. Rectangle

    鸽.


    csp-s模拟测试64

    A. trade

    反悔贪心:

    a<b<c,在b卖a可能不最优,如这情况。那么我们留给c一个反悔的机会。

    发现b-a+c-b=c-a,这就很好了。直接加两个b,一个b用来抵消在b卖a转而在取出位置卖a,一个用于单纯卖b。

    反悔贪心难在构造反悔操作,其实是基于性质。

    所以拿到题一定要推性质,无论是dp还是贪心,都能对简化问题有帮助。

    B. sum

    考试的时候没有打表,没看出来规律。

    发现$S_{n,m}$可以由$S_{n-1,m},S_{n,m-1}$递推,转移O(1)。

    然后把询问转换询问[m,n],莫队解决。

    C. building

    大模拟。

    并查集维护连通关系,把矩形看作点,相邻关系看作边,发现点数-边数(合并次数)=连通块数,这个式子的前提是无环,并查集保证了这一点。

    题解所说相邻关系与K同阶,不太会证,口胡一下就是

    矩形有两边长为1,称为短边,反之长边。所有矩形长边上的相邻关系之和不会超过K个,每个矩形短边上至多有两个。然而对于很混乱的情况,胡了胡了。

    这样的话就允许我们枚举相邻关系,如果我们能快速的找到相邻关系,复杂度就有保障。

    考场上打了$x_1==x_2$的部分分。不太会处理横竖交错的。

    正解:用一堆vector维护一堆信息,分类不漏就行。

    快速查找相邻关系用lower_bound

    Get到新姿势:假如我要在struct node{int l,r;}类型的vector中找到大于等于x的第一个下标

    bool cmpr(const Node &a,int b){return a.r<b;}
    int p1=lower_bound(h[d-1].begin(),h[d-1].end(),L,cmpr)-h[d-1].begin();

    注意cmpr的参数顺序


    csp-s模拟测试65

    期望得分:60+100+8

    实际得分:60+60+10

    A. Simple

    考试的时候没细看范围

    观察到n很小,一定有阴谋

    如果枚举y,对于一个y可算出c在[1,q]内有多少正整数x,然而会重复。

    用最小y去统计c就好了。

    可知$yin [0,min( frac {n} {gcd(n,m)},left lfloor frac{q}{m} ight floor)]$

    记得加上$x=0,y=i$除去$x=0,y=0$

    B. Walk

    这题考场上写了个hash表dp,不是菊花图很优秀

    dp方法类似Park,由于这题没有up down之分,儿子只用dp一遍,然而考场上傻了,做了两遍,常数爆炸。

    正解:枚举gcd,加入所有是gcd倍数的边,求森林最长链。稍卡常。

    最近的低错在另个里。

  • 相关阅读:
    web页面前图标
    leetcode收获
    Shell统计函数耗时(实现数字运算)
    Shell判断数值是否存在于列表
    设置Ubuntu虚拟机硬件时间与系统同步
    Python捕获键盘中断^C方法(Ctrl-C)
    Shell创建zip文件不包含完整路径方法
    jquery判断复选框checkbox是否被选中
    php Base64编码/解码
    php二维数组排序
  • 原文地址:https://www.cnblogs.com/hzoi-yzh/p/11626976.html
Copyright © 2020-2023  润新知