csp-s模拟测试 56~65

 

csp-s模拟测试 56

 

A. Merchant

对于一个肯定的集合,只多是先减后增、单调增、>0部分的单调减node

减的最优出如今0,check下函数

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

nth_element能够作到O(n)ui

 

B. Equation

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

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

 

C. Rectangle

鸽.blog

 

 


 

csp-s模拟测试64

A. trade

反悔贪心:element

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

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

 

反悔贪心难在构造反悔操做,实际上是基于性质。

因此拿到题必定要推性质,不管是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就行了。

可知$y\in [0,min( \frac {n} {gcd(n,m)},\left \lfloor \frac{q}{m} \right \rfloor)]$

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

 

B. Walk

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

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

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

 

最近的低错在另个里。

相关文章
相关标签/搜索