暑假集训 第一周

20180716: 2014上海全国邀请赛——题目重现

这套题之前做过,只做了一些,这次只做了觉得还能做的

A:Game with Pearls

题意:每次给一个长度为 N的序列,问能够通过 某些数加上 N*k(k>=0),使得最后的序列变成  1...N,

做法:注意到N很小,所以我们可以找到每个点可以到那些点,最后找一个最大匹配数(二分图匹配);记得贪心也可以

B:Beam Cannon  (待补)

题意:给一个H,W的矩形,看这个矩形,能包含最多点的个数

做法:很容易想到线段树,但是点更新是不可能的,因为X有4e4,就算只要点的横坐标,也要1e4,然后每次还得删掉x之前的点,然后再去点更新,y轴上建的线段树。所以,能不能线段更新呢?不要考虑,将某个点,作为最下面的一个点,考虑,如果要包含这个点,我们可以包含那些个区域,也就是更新 [y,y+H],这些点都可以够到,这样的话,整个Y轴就不用遍历了,只需要最后查询一个最大值就好了。

核心思想:点更新---->区间更新(也就是不考虑,选了这个点,遍历那些点可以被选到,转换成,如果要选这个点,我们可以选那些个区域) 

相同思想:poj1328(雷达)

C:做过(紫书差不多原题)

D:Battle ships(待补)

题意:给一个n*m的矩形,可以在水上放船,冰山和浮冰上不能放,两船可以放在同一行,当且仅当两船中间有 冰山。

做法: 先看行,我们给一行中连续的船标上相同的数字,也就是说,这几艘船,我们只能选一个,列同理,然后,考虑一艘船,肯定是行和列的交点,所以可以把船看作是X和Y相连的一条边,然后就是求一个最大匹配数,也就是最多匹配多少条边。

核心思想:能将(x,y) 这个点,考虑成X 和Y的边,也就是选了这个点,X区域和Y区域都不能在选了。*建图。

E:Maze

题意:给一张地图,然后给一些门,如果想过门的话,必须要已经有对应的钥匙,求左上到右下的最小时间花费。

做法:注意到图不大,所以我们直接爆搜,看到钥匙类型最多也就10种,所以考虑Hash(每种钥匙对应一定的位),将现在拥有钥匙的状态转换成 一个对应的int整数。还有就是建图,因为四个方向可能有门,这个点可能有钥匙,所以考虑一个点,要描述五个方面的信息,所以可以直接 mp[n][m][5],这样建图就好了;

坑点:一个点有可能有两把钥匙,注意起点是不是有钥匙(因为自己习惯于不考虑第一个点的状态,直接进队列);

题解链接

F:模拟题,队友不想再做

G:大模拟(待补)

H:Page Rank(题意是锅)

题意:现在都不清楚,大致就是模拟题,最后约束到误差以内就好

I:Smart Software Installer(待补)

题意:。。。模拟(cf倒数第二题)

J: (题意还是锅)

20180718:首届华中区程序设计邀请赛暨第十届武汉大学程序设计大赛

A:Number Theory?

做法: 打表找规律

核心:记住计算机,计算计算, 不要手算。 (打表找规律,找矩阵系数)

B:Computational Geometry?(待补)

做法: dp    (cf 最后一题)

C:Data Structure?

题意:给一个 1...N的序列,每次取走一个(剩下的)第K小的数字,问拿走数字的总和

做法:树状数组+二分,维护一个 1...N的树状数组,当查询第K小的时候,只要我们找到前缀和是K的就行了(但是这个前缀和一定是第一个,要不然的话,后面会有0,然后我们WA了一发)

D:水题,模拟

注意:一定看清样例再交,。。。(WA了一发)

E:(待补)

F:(待补)

G:队友搞过的

H:(待补)

I:水题

J:Enumeration?

题意:三个人读了三个小时,还是没读懂。

做法:直接看能够1/2,上下都有,或者是都为1/2

K:(待补)

牛客网暑期ACM多校训练营(第一场)

A:Monotonic Matrix

题意:在矩形中填0,1,2,但是要求就是当前点小于下面那个和右面的那个,就是只能非降的那种。让你求出总的方案数。

做法:考虑轮廓线。  0和1,1和2的轮廓线,前面的要求,已经限定,两条非降路径,(但是这里可以重合,因为可以0,2相 邻),所以我们考虑分开这两条线,重合或者是仅仅相切的情况都是可以的,但是相交就是非法的,所以考虑把0和1的轮廓线往左上挪一下,这样两条线就分开了),然后用LGV定理就可以了。

B:(待补)

C: (待补)

D:Two Graphs(待补)

题意:问G2的子图中有多少个和G1同构

做法:映射(全排列)+Hash ,考虑所有的映射,然后找到合法的映射,再去重

E:(待补)

F:Sum of Maximum

题意:问我们那个式子最后的结果

做法:组合数学+拉格朗日插值  先进行排序,然后,考虑当前值为X为最大值,那么前面的随便选,后面的至少有一个是X,利用容斥定理,再考虑(x-1)^n的拆开的形式,最后化成X^n-(X-1)^n。最后主要是,数值太大,不可能枚举,考虑插值,直接计算结果。

G:(待补)

H:(待补)

I:(待补)

J:Different Integers(待补)

题意:给一个序列,一共m次询问,问在[1,l]和[r,n]这个序列中,一共有多少个不同的数字

做法:离线查询

          (1) 树状数组(维护不再出现的数量): 考虑到a[i]<=N, 所以每个数字都有第一次出现和最后一次出现,也就是一个区域。我们将询问,按照r从小到达排序,如果当前的位置已经过了last[x],那么如果查询的l,在 first[x]之前的话,这个数字肯定是不出现的,   所以我们在找到last[x]的同时,更新 tree(first[x]-1)++。

         主要思想:离线查询(枚举R),后缀和; 考虑如果我的位置(枚举R(查询) 的位置)已经过了last[x],那么我的查询左区间再小于fist[x]的话,就会出现这个数字不存在,所以就是在pos(x)=(first[x]-1),这个位置上+1,当询问时,如果l<=pos(x)的话,就加上这个X

         (2)莫队(待补)

        (3)主席树(待补)

牛客网暑期ACM多校训练营(第二场)

A:run

题意:每次可以走一步,也可以走K步,问你走到[l,r]范围内的方案数

做法:递推,考虑到当前点,只有两种可能,一个是1,一个是K,递推即可。

B:(待补)

C:message

题意:给定一堆直线,然后询问一条直线与之前所有的直线的交点,X坐标的最大值

做法:转化为点的斜率 求一个点,与所有的点的斜率的最大值,考虑凸包,一个封闭的区域,斜率肯定是在边上去的最大值,考虑凸包的构造过程,也就是和那些点的斜率的最大值。

D:

E:

F:

G:

H:

I:car

题意:问一共有多少种方案

做法:分类讨论一下,奇数和偶数的情况

J:farm

题意:给一个n*m的farm,每个格子都有相应类型的作物,如果施肥,类型不符,这棵植物就会死掉,问我们最后死了多少颗植物

做法:状压+二维前缀和  不要枚举每种药,考虑所有药的某一位,然后,根据这一位分成两个集合,如果类型不同的话,肯定就死了。

核心思想:区域更新--->点更新

K:(待补)

暑假集训第一周已经过去了,难度,感觉和上一年留校的时候一样,看着各路神仙A题,自己一个错误调半年,还是要try your best,结果顺其自然。 之前想着做白书和紫书,但是发现,好像这个时间不是很充裕,因为多校一周就有4场,加上CF,牛客,比赛就会很多,所以还是先补题(对着白书和紫书刷),学知识,实在是烦了,我们就做紫书的数学思维题。Yes,we can!!!

猜你喜欢

转载自blog.csdn.net/qq_36424540/article/details/81161737