2012 ACM/ICPC Asia Regional Changchun Online

通道:http://acm.hdu.edu.cn/showproblem.php?pid=4267

题意:n个数,q次操作,每次操作有2种类型:

  1:a,b,k,c 增加满足[a,b]中的i,使得(i-a)%k==0的i位置增加c

  2:询问i位置的值

思路:(i-a)%k==0->i%k==a%k,对于更新的i位置,只要和a%k的值相同就可以了

  定义bit[i][j][k]:节点为i时模j余k的变化量,树状数组对于1操作直接更新,对于2操作sum(bit[i][j'][a%j']){1<=j'<=10}

代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4267.cpp

标签:树状数组

 

通道:http://acm.hdu.edu.cn/showproblem.php?pid=4268

题意:给出N表示小A和小B各有N张卡,先给出小A的N张卡的长和宽(都是整数),然后是小B的N张,问小A最多能盖住小B多少张卡(必须长宽都比小B的大)

思路:长升序再宽升序,每次暴力找就可以了,找到了的记得删除掉

代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4268.cpp

标签:贪心

 

通道:http://acm.hdu.edu.cn/showproblem.php?pid=4270

题意:给出一个串,有3种操作,

  操作1:在原串后面,添加一个串
  操作2:查询长度为len的子串或者长度小于等于len的后缀中字典序最小的
  操作3:删除最后的len个字符

思路:SAM可解决。

代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4270.cpp

标签:SAM

 

通道:http://acm.hdu.edu.cn/showproblem.php?pid=4271

题意:给定串长<=100000的循环母串和n(n<=10)且长度<=10的子串,问哪一个子串在母串中通过增加,删除,修改一个字母花费1变成母串中的  substring,求最小的花费,和对应字典序最小的子串。

思路:处理循环在母船后加10个字符就可以了,然后暴力枚举母串的s[i]开始的串和子串a[j]比较花费,算出每个a[j]的花费,最后排序就可以了。这里算花  费就是dp[i][j]:子串的前j位换成母串的前i位且完全匹配的花费.

  转移dp[i][j] = min(dp[i - 1][j] + 1, min(dp[i - 1][j - 1] + !(s1[i - 1] == s2[j - 1]), dp[i][j - 1] + 1));

代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4271.cpp

标签:修改字符串dp

 

通道:http://acm.hdu.edu.cn/showproblem.php?pid=4272

题意:长度为n(n<=1000)的栈,栈顶元素可以与下面1~5个数中相同的元素消去,问最后能否都完全消去。

思路:加入第i位一直到i+5位都没找到相同的,这时候不要急,因为可能i+1位和i+6位消了,i就能匹配到i+6这个位置了,所以对于第i位,最多只能匹配到i+9这一位,所以状压这10位就可以了。dp[i][j]:深度为i,状态为j时能否全部消完。

代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4272.cpp

标签:状压

 

通道:http://acm.hdu.edu.cn/showproblem.php?pid=4273

题意:求三维凸包重心到各个面的距离,求最小值

思路:三维凸包重心模版题

代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4273.cpp

标签:三维凸包重心模版题

 

通道:http://acm.hdu.edu.cn/showproblem.php?pid=4274

题意:给出一些关系,用来描述整个公司的人员所领导的下属个数,现在问给定的这些关系是否存在矛盾的地方

思路:直接从叶子节点往上走就是了,存在矛盾就不行。

代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4274.cpp

标签:搜索

 

通道:http://acm.hdu.edu.cn/showproblem.php?pid=4276

题意:先给出N和T,表示有N个房间,T分钟内必须从1号房间走到N号房间。接下来N-1行,给出3个数,表示联通的两个房间和通过这条路的时间(不重复)。最后给出N个数,表示  每个房间的财宝。问从1-N的最大财富是多少

思路: 先跑最短路,看到达终点的花费是否小于T,如果满足则将最短路的权值置为0,然后树形DP,dp[i][j]:到达i节点花费为j的最大财富

  状态转移:dp[i][j] = max(dp[i][j-w-k]+dp[son][k]);

代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4276.cpp

标签: 最短路+树形DP

 

通道:http://acm.hdu.edu.cn/showproblem.php?pid=4277

题意:给你n个有长度的线段,问如果用上所有的线段来拼1个三角形,最多能拼出多少种不同的

思路:暴力搜就可以了。复杂度3^n

代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4277.cpp

标签:暴力

posted @ 2014-10-10 02:23  mithrilhan  阅读(237)  评论(0编辑  收藏  举报