上一页 1 ··· 7 8 9 10 11 12 13 14 下一页
摘要: Problem AInna and Pink Pony题意:这一题实在太逗了。。。两个小时都在搞这一题。给一个n*m的棋盘。初始点在(x,y)然后有四种变幻(x+a,y-b)(x+a,y+b)(x-a,y-b)(x-a,y+b)。问你最少几步能到棋盘的四角。解法:先判断能不能走到,能走到的一定是x,y方向差值能整除a,b的。然后他们的商之和为偶数。(这个画一个图很好理解)最后判一下棋盘的长宽必须大于a,b(易错!)若是不满足除非起始点就在四角否则走不到。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #in... 阅读全文
posted @ 2013-12-19 02:12 张小豪 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 题意:若干个人中告诉你1 a b是朋友2a b是敌人3a b查询是否是朋友3a b查询是否是敌人。前两个若是矛盾则输出-1,否则不输出。后面两个是输出1不是输出0。并且朋友的朋友是朋友,敌人的敌人是朋友。(题目中的人只会来自于两个不同的集合)思路:建立两个并查集一个维护每个人的朋友集合,另一个维护这个人的敌人集合。在每次查询后需要维护四个集合,与a的朋友集合,b的朋友集合,a的敌人集合,b的敌人集合。对于前两个操作若是产生矛盾输出-1否则更新关系,对于后两个直接判断。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #... 阅读全文
posted @ 2013-12-18 20:28 张小豪 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 题意就不描述了,最简单的并查集。秒掉就OK代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define ll long long10 #define LEN 100010011 #define INF 0x7fffffff12 13 using namespace std;14 15 int n, m;16 int parent[LEN];17 18 void init()19 {20 for(int i=0; i<LEN; ... 阅读全文
posted @ 2013-12-18 10:42 张小豪 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 题意:就是有m个人去n银行告诉你每个人去每个银行的速度让你求每个银行都去人平均时间最少的方案。人比银行多。思路:加一个源点指向所有人(费用0流量1)加一个汇点所有银行指向他(费用0流量1)。这样就转化成最小费用最大流问题。用模版搞定即可。这题一开始自己死活过不了,看了解题报告发现结果要加eps不然就是过不了0.0我的程序eps从1e-3--1e-9都可以。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #incl... 阅读全文
posted @ 2013-12-16 21:29 张小豪 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 题意:有若干个电器设备需要不同的适配器才能接上电源,现在你要让尽可能多的电气设备接上电源。首先你手中有n个适配器和适配器的型号,再告诉你有m个电器和他们分别对应的适配器的型号,最后还有一个商店提供买不同型号的适配器转换器,转换是单向的A B表示能把A接口转换成B接口(就是原来需要用A适配器的现在可以用B适配器当然也可以用原来的不变)超市提供的转换器数量是没有限制的,可以无限买。思路:这道题很容易就转化为最大流问题首先一个源点连接不同的电器流量为1,不同的电器根据需要连上不同的适配器流量也为1,再根据不同适配器中能转换建立流量为INF的单向边,再根据每个每个适配器拥有的数量从没个适配器连接一条流 阅读全文
posted @ 2013-12-16 15:38 张小豪 阅读(422) 评论(0) 推荐(0) 编辑
摘要: 题意:(XXL, XL, L, M , S, or XS)每个尺码有若干件,需要分发给m个志愿者。告诉你每个志愿者有两个合适的尺码。问你是否每个志愿者都能找到合适的衣服?思路:其实是二分匹配问题,这两天在学网络流就转化了一下,首先在二分图的学生节点前各加一个指向他流量为1的边再用一个源点指向连接这条边的点,在衣服节点后加一个被指向流量为衣服件数的边。再在这些边后面增加一个汇点。这样图建好了,套一下模版就OK。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #i... 阅读全文
posted @ 2013-12-16 08:43 张小豪 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 题意:对于一个软件有若干个bug和若干个补丁告诉你打每个补丁需要的状态和打完后的状态还有打每个补丁的费用,让你求把软件修好的最小费用。思路:这道就是就是最短路然后再加上状态压缩存储,把+号与-号分开存在两个变量中,然后在Dijkstra执行的时候把补丁看成边,软件状态看成点就行了,别的都一样。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define ll long long10 #define eps 1E-811 #define... 阅读全文
posted @ 2013-12-15 21:35 张小豪 阅读(301) 评论(0) 推荐(0) 编辑
摘要: Problem ACollecting Beats is Fun题意:就是音乐游戏在4*4的网上一些格子需要在固定的时间点,告诉你一只手同一时间能点几个。问你能不能通关(就是一个不丢)思路:水题 。我开了一个数组统计一下每个时间出现的格子数。最后扫一遍判断有没有不能点完的就OK了代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define INF 0x7fffffff11 #define ll long lon... 阅读全文
posted @ 2013-12-14 00:57 张小豪 阅读(263) 评论(2) 推荐(0) 编辑
摘要: 题意:这道题主要给你一张图,然后让你输出一个矩阵,表示从i->j有多少种路径数, 若是有无限种边输出-1。思路:用floyd算法在求解的时候稍微改装一下Map[i][j] +=Map[i][k]*Map[k][j]在最后求出来的时候,看一下Map[i]][i]是不是为零。若不是这说明这一点在环上那经过这一点的所有路径就是无限长的。这样的话就把所有经过i的点更新一下就行了。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include ... 阅读全文
posted @ 2013-12-12 11:56 张小豪 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 题意:一张网络中有若干个源点及汇点。点上又最大能承载的流量超过了则会自动丢弃,让你求最大流。思路:稍微转化一下套一下模版就ok了。ps:刚刚入门网络流0.0只会模版。这里就讲一下图的转化吧。首先由于在每一点上都有限制所以我们必须把一个点拆成两个点,在两个点当中加一条边,来实现对于点上流量的控制。另外由于是有多个源点+多个汇点。所以我们要认为的加上一个源点使得此点到所有源点都有一条流量为无穷大的边,再人为加一个汇点,使得所有汇点到这一点都有一条流量为无穷大的边。这样一来图就建好了,剩下来的就是套模版了。 1 #include 2 #include 3 #include 4 #include... 阅读全文
posted @ 2013-12-12 00:48 张小豪 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 题意:这道题题有点坑一开始没看懂什么叫最坏情况。其实就是任意两点之中距离最大的,就是最坏情况。思路:floyd模版题,ps:竟然这次写跪了然后调试了半天T。T真是忧伤。。。首先根据给的点建图然后在建图过程中滤去>10的边。然后floyd,接着判断一下连通性,不连通直接输出Send Kurdy。否则输出最大值。这道题写的有点烦了。。。就不改了直接贴上来了。见谅代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #inc... 阅读全文
posted @ 2013-12-11 23:03 张小豪 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 题意:有若干种货币,并给出其互相交换的汇率,问能不能找到一个小于n的环使起始点的货币交换之后增长超过1%。思路:这道题坑了两个小时,一开始看他数据量比较小才20就想用搜索剪枝,后来仔细算了一下还是会超时的,再后来就去看解题报告了。果断想的方向就错了,其实是动态规划状态一看就知道该怎么写了=。=和floyd很像的。dis[i][j][k]表示从i到j交换k次所获得的最大收益。然后四重循环每次枚举中间结点v并从dis[i][v][k-1]转移过来。别忘了转的时候要记录路径。算好之后从1-k扫描一有超过1.01就打印路径即可。代码如下:(我写的比较长0.0) 1 #include 2 #inclu. 阅读全文
posted @ 2013-12-10 01:54 张小豪 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 题意:一个人在大楼的0楼,大楼最多到99层,有n部电梯每部电梯有可到达的楼层每个电梯移动一层的时间为T[i]秒换电梯的时间为60秒,给你一个楼层问你电梯到这个楼层的最短路径。思路:很容易看出是一个最短路问题,关键在于如何建图,首先我们分析一下我们很容易想到把楼层当作点把时间当左边,但是有一个问题由于它涉及楼层中换电梯所以这样做的话我们就无法计算换电梯的时间,所以我的方法是把一个楼层拆成n个点(这样做的前提是在这道题中n比较小 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9... 阅读全文
posted @ 2013-12-09 22:00 张小豪 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一个无向带权图,以及一个起始点一个终点。问你从起始点到终点的最短路径。思路:由于点最多有10000个,所以用裸的dijkstra显然是不行的,又由于边最多为20000条所以mlogn复杂度既可以了。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define INF 50000111 #define LEN 2000212 13 using namespace std;14 15 typedef pa... 阅读全文
posted @ 2013-12-09 17:09 张小豪 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一个有向带负权图, 问其中存不存在负环。思路:用bellman-ford算法松弛n-1次,然后在第n次时判断是不是还有点能松弛,若还能松弛则说明存在负环。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define INF 0x7fffffff11 #define LEN 510112 #define ll long long13 using namespace std;14 15 ll n, m, ... 阅读全文
posted @ 2013-12-09 01:45 张小豪 阅读(300) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 下一页