2015 ACM多校训练第一场

在下面网址看效果更佳>_<

http://mlz000.github.io/2015/08/07/2015-ACM%E5%A4%9A%E6%A0%A1%E8%AE%AD%E7%BB%83%E7%AC%AC%E4%B8%80%E5%9C%BA/

题外话

这个暑假以前就决定要把这次多校的所有题全补了,中间断断续续,总算把第一场的题补全了,鄙视一下颓废的自己。。。


hdu 5288(1001) OO’s Sequence

Solution

水题,定义两个数组L[i],R[i]示第i个数左侧和右侧最接近它且值是a[i]因子的数字的位置,统计贡献即可。由于a[i]范围很小,因子数很小,暴力统计更新l,r即可。

Code


hdu 5289(1002) Assignment

Solution

水题,很容易想到先用st表预处理区间最大最小值,然后枚举左端点,二分右端点检查是否满足即可。复杂度O(NlogN),也可以用单调队列维护最值

Code


hdu 5290(1003) Bombing plan

Solution

这题比赛时候没时间看,其实赛后发现并不是很难。看数据范围很容易往O(NW)上去想。于是不难想到dp

定义两个数组

f[i][j]表示以i为根的子树全部破坏掉,还能向上破坏最多j的距离,需要的最少点数

g[i][j]表示以i为根的子树未被全部破坏掉,且未被破坏的点距离i最远为j,需要的最少点数

  • (1)不取i点,则

    f[i][j]=f[son][j+1]+∑l是i的其他孩子min(f[l][0],f[l][1],...,f[l][j+1],g[l][0],g[l][1],...,g[l][j?1])

    g[i][j]=g[son][j?1]+∑l是i的其他孩子min(f[l][0],f[l][1],...,f[l][j],g[l][0],g[l][1],...,g[l][j?1])

  • (2)取i点则

    f[i][w[i]]=1+∑l是i的孩子min(f[l][0],f[l][1],...,f[l][w[i]+1],g[l][0],g[l][1],...,g[l][w[i]?1])

    很容易想到用两个数组ff,gg分别维护f,g的最小值,复杂度O(NW),具体实现的时候注意下边界0的情况即可。仔细想想,转移方程还是比较容易得到的

Code


hdu 5291(1004) Candy Distribution

Solution

考虑最暴力的dp,dp[i][j]表示分配完第i种物品,A比B多j个的方案数,然后dp转移的时候枚举分给Ax个,By个,则dp[i][j+x?y]+=dp[i?1][j]。考虑第i种物品有s个,x+y≤s时可转移,则dp[i?1][j]对dp[i][j]的贡献有s2+1次(x=y=0...x=y=s2),下发现,j每变化2,贡献-1。奇偶两种情况考虑时,这个东西类似于等差数列,差分两次后我们就可以完成递推了。复杂度O(n3)

Code


hdu 5292(1005) Pocket Cube

Solution

这个题就是个找规律的题,看了题解才会做QAQ。。。

Code


hdu 5293(1006) Tree chain problem

Solution

比赛时没看,赛后发现是个很裸的题= =。

考虑dp,dp[i]表示以i为根的子树的最优值,则

sum[i]=∑j∈son[i]dp[j]

容易想到有两种转移

* (1) dp[i]=sum[i]

* (2) dp[i]=value[p]+∑sum[k]?∑dp[k] (链p的lca是i,k是链上的节点)

链上求和很容易想到树链剖分,复杂度O(Nlog2N)

Code


hdu 5294(1007) Tricks Device

Solution

水题,最短路寻找道路边数最少的最短路,总边数减去最少条数为第二个问答案。

把最短路图抽出来建流量为1的边,最小割即为第一问答案。

Code


hdu 5295(1008) Unstable

Solution

平几题,给出中点很容易想到倍长的事情。如图,倍长AF,做BG平行于AD且|BG|=|AD|,容易看出三角形FDA和三角形FCA′全等

不妨固定BC,A′可以通过以C圆心,半径长为da,和以B为圆心,半径长为2ef的圆交点得到。

由于A′GBC是平行四边形,可以得到G的坐标。于是D的坐标可以通过以C为圆心,半径长为cd,和以G为圆心,半径长为DG(即ab)的圆得到。于是可以得到A的坐标

Code


hdu 5296(1009) Annoying problem

Solution

比赛时自己蠢一直没想出来,想过dfs序但没细想= =

其实每次插入的时候找两个dfs序最接近的点x,y一个大于u一个小于u即可。每次增加的花费是dis[u]?dis[lca(x,u)]?dis[lca(y,u)]+dis[lca(x,y)],即为u到x?y链上的距离。删除时类似。

找不到这样的点时直接取最大和最小dfs序的两个点即可

为什么这样呢,给定固定点把它们连通得到的树一定是固定的。这样选点的目的是为了不让边重复。

Code

hdu 5297(1010) Y sequence

Solution

这个题比赛时我写的二分,一直T,= =非常蛋疼。赛后看题解和问别人才知道,可以迭代,迭代次数不会太多。

首先考虑反函数f(x)表示前x个数中Y-sequence的数量。我们迭代来算这个值,不用二分。

我们要求第n个Y-sequence,开始令x=n,如果f(x)=now,那么前x个数中有n?now个不是Y-sequence的数,那么我们令x=x+n?now,看看新的f(x)是否等于n即可。

我们每次只加了缺少的答案数,所以不可能超过正确答案。

迭代还是玄学啊。。。。新姿势get

Code


hdu 5298(1011) Solid Geometry Homework

Solution

比赛时以为是大型计算几何看都没看,赛后发现这是个SB题,把点带到平面和球面方程中,确定点在哪一边把结果异或一下考虑染色即可。

Code


hdu 5299(1012) Circles Game

Solution

自己太弱,不会扫描线,赛后补了下姿势。。

很容易想到扫描线处理圆,把圆变成树,然后就变成了经典博弈问题树上删边问题,具体可以看09年国家集训队论文<<组合游戏略述——浅谈SG游戏的若干拓展及变形>>。

结论是叶子节点sg值为0其余节点sg值为所以孩子节点sg值+1的异或和。

Code

完结撒花!

继续补题!>_<

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-23 10:57:25

2015 ACM多校训练第一场的相关文章

HDU 5335(2015 ACM多校训练第四场1009)

Walk Out Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2469    Accepted Submission(s): 485 Problem Description In an n?m maze, the right-bottom corner is the exit (position (n,m) is the exit)

HDU 4869 Turn the pokers 多校训练第一场1009

Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 282    Accepted Submission(s): 89 Problem Description During summer vacation,Alice stay at home for a long time, with nothing to

hdu 5288||2015多校联合第一场1001题

http://acm.hdu.edu.cn/showproblem.php?pid=5288 Problem Description OO has got a array A of size n ,defined a function f(l,r) represent the number of i (l<=i<=r) , that there's no j(l<=j<=r,j<>i) satisfy ai mod aj=0,now OO want to know ∑i

hdu5289||2015多校联合第一场1002贪心+RMQ

http://acm.hdu.edu.cn/showproblem.php?pid=5289 Problem Description Tom owns a company and he is the boss. There are n staffs which are numbered from 1 to n in this company, and every staff has a ability. Now, Tom is going to assign a special task to

2014多校联合训练第一场(组队训练)

这是我.potaty.lmz第二次训练,毕竟经验不足,加上水平不够,导致我们各种被碾压. A - Couple doubi: 这道题是道比较水的数论.但我们都没想出来要怎么做.后来是potaty提议打个表看看,然后lmz打出表后发现了规律.我还没细看,待研究后再补全. D - Task: 这道题一看就知道是个贪心(现在只要是有deadline的题我都觉得是贪心了).虽然想出来了,但还是不会严格证明为什么只要取满足task的且y最小(y相等时x最小)的machine就行了. 我的做法是把所有mac

hdu 4865 Peter&amp;#39;s Hobby(2014 多校联合第一场 E)

Peter's Hobby Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 545    Accepted Submission(s): 237 Problem Description Recently, Peter likes to measure the humidity of leaves. He recorded a leaf

hdu 4869 Turn the pokers (2014多校联合第一场 I)

Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1265    Accepted Submission(s): 465 Problem Description During summer vacation,Alice stay at home for a long time, with nothing t

hdu 4865 Peter&#39;s Hobby(2014 多校联合第一场 E)

Peter's Hobby Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 545    Accepted Submission(s): 237 Problem Description Recently, Peter likes to measure the humidity of leaves. He recorded a leaf

2014多校联合第一场

1001:Couple doubi 暴力打表找规律可知,对于任意的p. (1^i+2^i+...+(p-1)^i)%p={ 非0     ,i%(p-1)==0 0        ,  i%(p-1)!=0 } 所以,结果就很显然了. #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<stdlib.h> #include<c