随笔分类 -  acm训练

摘要:连接:http://acm.hdu.edu.cn/showproblem.php?pid=4602题目大意是给你一个数的N的加法构成中另外一个数k的出现次数。如 4=1+1+1+14=1+1+24=1+2+14=2+1+14=1+34=2+24=3+14=41出现了12次。这题是赵鹏搞出来的。一个数N可以分成好N个块,如果说N= 5,K= 2 那么则会有(0|0|0|0|0)0|00|0这样的可以出现或者在边上的情况00|或者|00,才能保证有00会出现,因为122中2出现两次,所以不用怕出现重复的情况。代码: 1 #include 2 #include 3 #include 4 #inclu 阅读全文
posted @ 2013-07-23 21:32 某某。 阅读(413) 评论(0) 推荐(0)
摘要:连接http://acm.hdu.edu.cn/showproblem.php?pid=4608题目大意:给你一个数N,让你每一位上的数字加起来之后可以被10整除的大于N的数中最小的一个。一开始想错了,想BFS,后来一想肯定不行然后去看了1003,然后发现1003不大适合我。然后就换了1009,看了一会就想想把所有的数加起来看他离%10 == 0差多少,然后从各位开始补,如果个位能补到10那就是结果,如果不能那么用两位或者更多位一定能补掉这个结果(num[n-1]+1000000-bit)%10,bit为其他加1的个数。代码如下: 1 #include 2 #include 3 #incl.. 阅读全文
posted @ 2013-07-23 21:22 某某。 阅读(408) 评论(0) 推荐(0)
摘要:连接:http://acm.hdu.edu.cn/showproblem.php?pid=4607题目大意就是给你N个点和N-1条边,保证整个图连通(因为边的限制,所以不可能形成环),每条边长度唯一,问要到达K个点的最短路径(起点任意)。这题画了好久的图,当时就是想找最长链,任意起点,然后BFS找到最远的点,然后从最远的点再进行BFS找最远的点,那么这两个点就是最长链的两个端点,由于图是联通的,手N-1条边的限制,所以一定是一棵树,而且要到达K个点也就好球了当K>n时,所以是要到最长路的分支上去的。而且取得点一定是去了还要回来到最长链上。结果也就出来了。后来虎哥说这个最长链就是树的直径。 阅读全文
posted @ 2013-07-23 20:58 某某。 阅读(664) 评论(0) 推荐(0)
摘要:link:http://acm.upc.edu.cn/problem.php?id=2161这题的大题题意是给你N个多面体,每个多面体的每个面都有字母,然后告诉你几个单词,问你能拼出几个单词。从这道题意不难看出这每个多面体只能每次提供一个字母,也就是说每个多面体预期所带的字母之间所能提供的流量为1 ,不难看出是个二分图,当时用的DFS果断超时,然后想到二分匹配时觉得二分匹配不熟,写了个EK最大流也超市。。。后来回到宿舍敲了一个DINIC果断88ms啊!刚才写了个二分匹配还是超市,不过QC他们的二分过了不知道为什么。。。#include <stdio.h>#include <i 阅读全文
posted @ 2013-05-17 01:58 某某。 阅读(328) 评论(0) 推荐(0)
摘要:题意:一条长为l(1~1,000,000,000)的河中,有n(1~50,000)块可垫脚的石头(不包括起始点和终点的),给出它们与起始点的距离rock[i],现在要你移除其中的m块,使得具有最小间距的相邻两块石头之间的距离最大。View Code 1 #include <stdio.h> 2 #include <iostream> 3 #include <algorithm> 4 using namespace std; 5 int cmp(const int &a,const int &b) 6 { 7 return a<b; 8 阅读全文
posted @ 2013-03-27 16:48 某某。 阅读(221) 评论(0) 推荐(0)
摘要:题目连接:http://poj.org/problem?id=3273题意:给出农夫在n天中每天的花费,要求把这n天分作m组,每组的天数必然是连续的,要求分得各组的花费之和应该尽可能地小,最后输出各组花费之和中的最大值思路:这个花费的最大值一定介于所有值的和与所有天数中最大的哪一个。直接让l = maxday ,r = sum然后取中值,枚举,从第一天开始,如果现在的金钱大于mid,那么组数就+1这样就检查组数即可,假设是小于,说明这个mid值明显偏大。这样即可找出答案代码:View Code 1 #include <stdio.h> 2 #include <iostream 阅读全文
posted @ 2013-03-27 15:43 某某。 阅读(196) 评论(0) 推荐(0)
摘要:最近做了一下网络流的题。发现很多题可以转化为网络流,比如地图上的点POJ 3422 和Going Home。最大流的题目真心不能手贱啊,那天一道题跪了一天,晚上才看到写错了一个下标,后来有一道题有看了一晚上一直到2点多,以后没事一定要不数据输出出来,最后输出的时候发现忘了加pop()你这不坑爹吗。今天一直输出忘了return 1= =.哎,说说总结吧1.做过的次数可以化为点之间的容量2.对于走过之后的数据清零比茹3422就可以把拆点,每走到自己的点的时候就把自己和自己连起来,一天有费用的一条没有没用的,有费用的边容量为1;3.重边不能用邻接矩阵。加重边的时候要加费用相同4.注意容量问题,想清楚 阅读全文
posted @ 2013-03-27 14:13 某某。 阅读(177) 评论(0) 推荐(0)
摘要:题目连接:http://poj.org/problem?id=2516题意跟题目输入这里写的很明白:http://blog.csdn.net/lyy289065406/article/details/6742534无非就是k种物品,直接对每种物品进行一次最大流就OK了~View Code 1 #include <iostream> 2 #include <queue> 3 #include <iostream> 4 #include <cstdio> 5 #include <cstring> 6 #include <vector 阅读全文
posted @ 2013-03-27 13:43 某某。 阅读(201) 评论(0) 推荐(0)
摘要:题目连接:http://poj.org/problem?id=2195题目大意 :题目的意思就是给你一个map然后m代表人,h代表house,一个人只能进入一个house,一个house只能住一个人,问你所以人进入house所能用的最小步数是多少~思路:把man和house分别看做一个集合,这样的话你就可以对每个人和每个house 连接,cao = 1,cost = abs(x1-x2)+abs(y1-y2);然后开一个超级源点就可以了。其实模型就是走多少次就是容量。费用根据题目而定。View Code 1 #include <iostream> 2 #include <cs 阅读全文
posted @ 2013-03-27 13:38 某某。 阅读(271) 评论(0) 推荐(0)
摘要:题目连接:http://poj.org/problem?id=3422题目大意:n*N的格子,每个格子上都有数字,从左上角往右下角走,只能往右或者往下走,每走一个格子就加上格子上的分数,走过后格子上的分数为0,走K遍。问能够得到的最大的格子数是多少。这题如果不是做费用流专题真心不会想不到费用最大流。以为是K次,所以可以设容量为K。费用为当前格子的分数。然后因为每个点只记录一次分数,所以,用拆点来处理,用自己和自己连接一下,容量为1,费用为k然后再设一条边容量为K-1次,费用为0;然后就是设超级源点和汇点,容量为K费用为0;我还有一个思路就是每条边的权值都为K,然后找到最大流的时候直接把COST 阅读全文
posted @ 2013-03-27 13:18 某某。 阅读(225) 评论(0) 推荐(0)
摘要:C++ sort函数用法FROM:http://hi.baidu.com/blackdemonfish/blog/item/e2c1d655d702a45ed0090652%2Ehtml最近算法作业经常需要排序。偶是一个很懒的人,于是一直用C++的sort进行排序~~~不少同志对此心存疑虑,所以今天就写一写sort的用法。声明:此用法是从某大牛的程序中看到的,其实偶只是拿来用,不知所以然,飘走~~~~~MSDN中的定义:template<class RanIt>voidsort(RanIt first, RanIt last); //--> 1)template<cla 阅读全文
posted @ 2013-01-21 11:43 某某。 阅读(284) 评论(0) 推荐(0)
摘要:link:http://acm.hdu.edu.cn/showproblem.php?pid=2063匈牙利算法代码:View Code 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <iostream> 5 using namespace std; 6 int map[1005][1005]; 7 int used[1005],linker[1005]; 8 int find(int x,int n) 9 {10 int i;11 for( 阅读全文
posted @ 2013-01-19 11:13 某某。 阅读(356) 评论(0) 推荐(0)
摘要:题目连接:http://poj.org/submit?problem_id=3281有人所用邻接矩阵会超时。。。然后。。。哥笑了~(*^__^*) 嘻嘻……其实这题我觉得这不超时这题一开始崔老师说把牛放中间我的意思是把人放在最前面,因为如果放在中间1头牛3物三水的话答案就会错误,但是如果把人放在前面感觉又会不大对= =。。然后崔老师就神一般的回答说拆点!顿时天亮了= =。。。其实我真心不知道拆点是神马。。。比赛有一道拆点我枚举匹配一下就过了。。虽然也是拆点的思想= =。。。总之拆点就是为了先吃每个点的出度唯一(个人理解)而做的重复两次操作。博客的上一个acm computer其实就是拆点。。。 阅读全文
posted @ 2013-01-19 00:03 某某。 阅读(254) 评论(0) 推荐(0)
摘要:题目连接:http://poj.org/problem?id=3436英语不好,直接在网上搜的题意、、、很详细题意:电脑工厂有N台机器,每台机器对半成品电脑进行加工。每个电脑由P个部件组成,用0和1表示某部件是否已存在(1表示存在了)。每台机器对加工的电脑都是有要求的,只有满足要求,才能进入机器进行加工。机器对电脑部件的要求用0,1,2表示,输入的P个数中,第i个数为ai,ai=0表示该半成品电脑不能有部件i,ai=1表示该半成品必须已有部件i(即1),ai=2表示有没有此部件都无关系。进入机器加工后的电脑出来后所含部件情况用P个数字(0或1)表示。输入:P和N,接下来N行介绍N个机器,第一个 阅读全文
posted @ 2013-01-18 17:03 某某。 阅读(389) 评论(0) 推荐(0)
摘要:题目连接:http://poj.org/problem?id=1459题目实在是不好懂,直接在网上搜了好多题解看题意。。。对于多源多汇点的这种直接虚拟一个总会点就OK了。题意:Sample Input2 1 1 2 (0,1)20 (1,0)10 (0)15 (1)207 2 3 13 (0,0)1 (0,1)2 (0,2)5 (1,0)1 (1,2)8 (2,3)1 (2,4)7 (3,5)2 (3,6)5 (4,2)7 (4,3)5 (4,5)1 (6,0)5 (0)5 (1)2 (3)2 (4)1 (5)4Sample Output1562 1 1 2 (... 阅读全文
posted @ 2013-01-18 12:01 某某。 阅读(663) 评论(0) 推荐(1)
摘要:英语不好,懒得看题意,在网上搜的题意题目连接:http://poj.org/problem?id=1273题目大意:每当下雨,农夫FJ最喜爱的养尊处优的地方周围就变成了一个池塘,这让他很不爽,所以决心要把这个问题解决掉,所以他就在四周建造了一些渠沟以便排水,更为巧妙地是可以把这水排到一个小溪处。编号为1的节点作为池塘,编号为n的地方作为小溪。求最大排水量注意重边的情况就可以了;若菜一开始 打的代码没初始化,结果WA最大流基础入门:http://www.cnblogs.com/0803yijia/archive/2013/01/18/2865837.html代码:View Code #inclu 阅读全文
posted @ 2013-01-18 10:37 某某。 阅读(475) 评论(0) 推荐(0)
摘要:原文地址:http://blog.sina.com.cn/s/blog_6cf509db0100uy5n.html因为是初学教程,所以我会尽量避免繁杂的数学公式和证明。也尽量给出了较为完整的代码。本文的目标群体是网络流的初学者,尤其是看了各种NB的教程也没看懂怎么求最大流的小盆友们。本文的目的是,解释基本的网络流模型,最基础的最大流求法,即bfs找增广路法,也就是EK法,全名是Edmond-Karp,其实我倒是觉得记一下算法的全名和来历可以不时的拿出来装一装。比如说这个,EK算法首先由俄罗斯科学家Dinic在1970年提出,没错,就是dinic算法的创始人,实际上他提出的也正是dinic算法, 阅读全文
posted @ 2013-01-18 08:43 某某。 阅读(508) 评论(0) 推荐(0)
摘要:题目连接:http://poj.org/problem?id=3026这题数据太坑了。。。不看解题报告不知道。。。尼玛,m,n后面不能加getchar(),得加gets(s);尼玛是有多少个空格啊~wa了N遍啊思路 先求点,然后对每一个点进行一次bfs,然后存距离,之后直接最小生成树。一开始我是用两个for循环去的值,直接超时。。。代码:View Code 1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 5 using namespace std; 6 struct nod 阅读全文
posted @ 2012-11-15 00:32 某某。 阅读(217) 评论(0) 推荐(0)
摘要:题目连接:http://poj.org/problem?id=2485题意比较明显。。。就是求最小生成树里的最长路,其实用dijks也可以。。。View Code 1 #include <iostream> 2 #include <stdio.h> 3 #define max 65536; 4 using namespace std; 5 6 int map[505][505]; 7 int ans; 8 void init(int n) 9 {10 int i,j;11 for(i = 1;i <= n;i++)12 {13 for(j = 1;j... 阅读全文
posted @ 2012-11-13 20:15 某某。 阅读(136) 评论(0) 推荐(0)
摘要:题目连接:http://poj.org/problem?id=1789每条边的权值为任意两truck不相等字母的数量,求最小生成树代码:View Code 1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #define max 1000000 5 using namespace std; 6 int map[2005][2005]; 7 int ans; 8 void prim(int n) 9 {10 int i,pre,j,min;11 int vis[2005] = 阅读全文
posted @ 2012-11-13 18:23 某某。 阅读(165) 评论(0) 推荐(0)