SRM 465(DIV1 DIV2)

来源:互联网 发布:利达128eii主机编程 编辑:程序博客网 时间:2024/04/28 04:32

这场是白天在基地做的,是再一次回到DIV1之后的一场TC。进room发现排名倒是第5.。。。。。比赛前就定位只要出250分就可以了,所以开场不急着做。慢慢分析,导致边上ZT HS 都拍完了我还读懂题意。。读完题,分析了下就开始。然后果断提交。分不高。才178+。交完我还查了很多数据才敢开500的。看完500想到最小割,但是没想到如何建图,于是就只过了一个题。ST无比紧张,顺利过了250排名房间第5O(∩_∩)O~。rating涨到了1300+。

    DIV 1

250 :暴力枚举

题意:给你2个N个点的集合。问你这两个集合中任取两个点作为正方形的中心,然后正正方形可以旋转,但是边长为整数。问你可以摆放的不重叠有多少组。

解法:在图上画了会,不难得出,当两个正方形所有边平行摆放的时候是最优的,设两个正方形边长为a,b;于是所有满足a/2+b/2 <= 两个点的距离。

于是可以枚举a验证b有多少个,累加所有的即是最后的答案了的。

注意点:其中相乘的地方会有溢出int的。所以。。。。。已经在此吃过n次亏的朋友可以注意下。

500:网络流最小割问题

题意:给你tn个炮台,n个敌方基地,m个敌方基地所需要的植物能量供给站。基地可以通过供应站提供能量,一旦基地依赖的供应量都被击毁,这个基地站就被毁灭。现在炮台可以击落敌方基地,也可以击落供应站。基地依赖能量供应站的条件是距离小于等于所给的距离。炮台击落一个目标的所需能量是距离的平方,现在问你是的所有敌方基地都失效的最小能量需要是多少。

解法:就是建图跑最大流,因为最小割等于最大流。

其实网络流关键不是代码问题,而是建图问题,一旦建图问题,直接模板贴起,就很happy的拿很高的分。

这题如何建图的。因为其不是要求最小的击打次数。

建图方式:把tn个炮台抽象为一个超级源点,然后还有一个超级汇点。

所有基地和源点连边,权值为基地到炮台的距离的平方值最小值。然后每个植物能量供应站和汇点连边,权值为能量供应站到炮台距离的平方的最小值。然后如果基地能够依赖一个能量供应站,就讲这两个点连起,权值为无穷大,其他所有的权值为负数。。

原理就是让图无法有流从源点流向汇点的最小割,就是一个最小割问题。用SAP EK等求最大流就可以了的。

1000 继续不是我般水人能够做得起的。。。

DIV2

250:简单的暴力

题意:给你N个数字,问你有多少对,这个数对两个数通过排列,能否有出了前导0后市相同的。

解法:当然不能傻到那这两个的排列去比对。会无情的T的。。。。所以统计没个数字包含多少个1 ,多少个2多少个3.。。。。。

然后比对两个数的时候,看其1的个数2的个数。。。9的个数是不是都相同,相同就+1。

然后返回最后结果就对了的。。

500

同DIV1的250

1000 DP

题意:给你n个时间点。但是给你的时间点都是只有分钟没有小时的。

现在你可以给这些时间安排小时。是的这些时间是按严格递增的。

问你这样安排中字典序第K小的是哪个序列的。字典序定义:你把所有的时间点连接成字符串,然后就是字符串的字典序了的。

解法: DP 。。

我的DP方程,就是dp[i][j]表示为到第i位为j的时候,得到的多少个。当然这个有个地方需要注意,就是你要去枚举从0~n都安排好几个了的。就是说你从第a位开始枚举此为0.。。9这些数字中一个b的时候,dp之后面的。然后统计dp[n-1][0..9];如果当前所有的加和超过k了,就设置此a位为之前定下来的b..如果相等的时候需要注意这个地方很关键,此位依旧是之前b,但是总数统计的时候如果当前枚举的不是最后一位的时候就不需要在总数上加上新的和。因为你设置此位之后要重新的去定义后面的。这个地方我没过ST挂了的。。。。且一直查不到错的。。。

代码:

 

怕我讲的啰嗦大家看不懂,所加贴上我丑陋的1000的代码O(∩_∩)O~。

继续加油做TC练习,争取早日变黄。。O(∩_∩)O~

原创粉丝点击