自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

NaCl__的博客

水题人生

  • 博客(64)
  • 资源 (1)
  • 收藏
  • 关注

原创 01相等的字串。

给出一个只有01的字符串,请找出最长的的01的数目的相等的字串。。这题最暴力的解决方法就是就是先预处理每个区间01的数目,然后枚举起点和重点,时间复杂度是O(N^2)。下面我们来介绍一种O(n)时间复杂度的做法。。。首先我们可以用一个数组B[i]把串A当中A[0...i]中1和0的差存起来。这样我们能发现符合要求的就是串满足B[i]==B[j].题目要要最最长,然后找到i-j跨度最大的

2015-12-31 09:05:16 778

原创 Uva11374

因为商业线只能坐一次我们可以枚举做哪条。。先用两次迪杰斯特拉算法预处理出从起点到各个点的最短距离和终点到各个距离的最短路= =假设d1[]存的是起点到其他点的距离,d2[]存的终点到其他点的距离。那么总共的时间就是d1[a]+T(a,b)+d2[b];#include#includestring.h>#include#include#include#includ

2015-12-31 08:47:37 353

原创 1475 建设国家

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1475这题一开始我是用贪心去做的,但是一直没过。。。貌似贪心并不能得到最优解法。然后这道题用优先队列来写首先我们先把对于第i的中间站可以连接的城市用向量数组存起来。。然后在只有满足中间站数量这题真的是很妙。。膜拜ing#include#

2015-12-31 08:47:32 573

原创 hdu2680

http://acm.hdu.edu.cn/showproblem.php?pid=2680题意就是给你n个起点,一个重点,问从起点到终点最小的花费是多少= =首先这题是有向图,然后我们把起点看成是终点,终点看成起点。然后用迪杰斯特拉算法求最短路。然后因为我们把终点和起点换了,所以我们建图的时候本来是x->y,要写成y->x#include#includestring.h>

2015-12-31 08:47:27 311

原创 HUD(2444)

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2444 就会给你n个人,m个朋友关系,然后让你判断是否能把他们分成两组然后里面谁也不认识对方如果能,输出最大的组的人数 解法,先判断二分图,然后在二分图匹配 #include#includestring.h>#include#includeusing namespa

2015-12-31 08:43:41 297

原创 Uva(10158)

这题真的是并查集的经典题目= =题意是给出n个人,然后给出若干的操作1表示让a,b成为朋友,若与前面的朋友敌人关系相矛盾,输出-12表示让a,b成为敌人,若与前面的朋友敌人关系矛盾输出-13判断a,b是否是朋友,是输出1,不是输出04判断a,b是否是敌人,是的话输出1,不是的话输出-1首先ab朋友关系部成立是他们刚好属于敌对的阵营。同理,a,b的敌对关系不成立的条件是他们属

2015-12-31 08:43:37 302

原创 Uva(10594)

这题是最小费用最大流的问题,给出边的关系和花费,然后给吃D和K,D是要运输的数据流。K表示每条边能运输的最大流量,这图的应该构造无向图,而且自己发现,凡是要无向图的网络流问题最好还是用邻接表来表示这样就可以解决重边和反向边问题,之前用邻接矩阵来表示一直错= =我们还要抽象出一个源点0,然后0-1的花费为0,容量是D,然后上模板就好了#include#includestring.h>

2015-12-31 08:43:32 300

原创 Uva11045

题意:有6种类型的志愿服,给你n件衣服(n一定是6的倍数),然后m个志愿者,接下里有m行,有两个字符串,表示志愿者能穿的衣服的尺码,问你是否所有志愿者都能找到合适的衣服= =最大流:0为源点,m+7为汇点,源点到每种志愿服的容量是n/6,志愿服和志愿者之间的容量是1,志愿者和汇点之间的容量是1,然后其余源点到汇点的最大流F,若F==m则输出YES,否则就是NO..#include#

2015-12-31 08:43:28 399

原创 Uva753

题意:给你n个插座,然后接下俩的n行是对插座类型的描述,然后给你m个电器,接下来的m行是对电器的描述,电器的种类和电器的插座类型,然后给出k种转换器,接下来的k行就是第一个字母表示该转换器可以和那种电器相连,第二个字母表示该转换器可以和那个插座相连,注意一种转换器可以有多个。。。。然后让你求得就是不能插上电源的电器有多少个。。最大流的问题,0作为原点,每个电器的编号是1-m,转换器的编号是

2015-12-31 08:43:25 446

原创 Uva(10330)

这题的题意是给出n的点,每个点有容量限制,然后给出每条边的运输的容量,问你从XX城市运送电量到YY城市最大的电量是多少。。最大流的模板题,直接用EK算法。。XX城市设定0,YY城市为n+1。还有一点要注意的是在求最小的残量的是还要看每个顶点容量。。#include#includestring.h>#include#include#includeusing names

2015-12-31 08:43:21 293

原创 Uva10806

这题是要你求从顶点1到顶点n然后再从n到1的最小的花费,注意两次走的边不能有相同的。。。原本单蠢的以为求一遍最短路,然后把边给删掉。。然后在跑一遍。后来想想不行啊,这样第一次的最短路会造成第二次回去无路可走。其实关键是在求第二次的最短路的时候我们要对图进行一下处理,把无向图转变为有向图。我们先把一个次走过的边的权值变成0,然后再把它的反向变的权值转为相反数。这样两次一定要走的路的权值就会抵消掉

2015-12-31 08:43:19 425

原创 Uva 558 Wormholes

这道题是要判断图中是否存在负环。。。用BF算法。。从0开始松弛存在负环,说明经过n-1次的松弛之后,还可以继续松弛。BF算法#include#includestring.h>#include#include using namespace std;#define inf 99999999const int maxn=2*2000; int u[maxn]

2015-12-31 08:43:14 256

原创 Uva(10986)

很裸的一道dijk算法题,因为顶点数太多无法用邻接矩阵表示,所以要用临界表来表示AC代码#include#includestring.h>#include#include #include#includeusing namespace std;using namespace std;const int maxn=2*50000;#define inf

2015-12-31 08:43:10 293

原创 hdu2066(迪杰斯特拉算法模板)

这道题要注意重边问题= =#include#includestring.h>#include#includeusing namespace std;const int maxn=1000;int G[2*maxn][2*maxn];int f[2*maxn],d[2*maxn];#define inf 100000000int dijk() {

2015-12-31 08:43:05 236

原创 10099 The Tourist Guide

题意:给出n的城市m条通道,然后每条通道最大的承载人数给出来了,然后给出起点和终点以及要搭载的人数,问最少要走多少次才能把全部游客送到目的地因为导游每次都要跟团,所以每条交通道路搭载的最大人数要减1= =克鲁斯卡尔算法,就会排序的时候按照运输人数的从大到小排序,然后当起点和终点在一个联通分支时即可#include#includestring.h>#include#inc

2015-12-31 08:43:01 310

原创 prim算法

prim算法是构造最小生成树的一种算法= =个人觉得写起来没有克鲁斯卡尔那么优美首先我们用个二维数组G[N][N]来保存权值,用low[N]数组来保存最小权值,vis[N]来保存是否已经添加到MTS中然后结合poj1258实现prim算法#include#includestring.h>#include#include#includeusing namespac

2015-12-31 08:42:57 296

原创 10369 - Arctic Network

这题的意思是给出p个点,然后p的点可以由无线电通信或者是卫星通信,然后只有m的点能通过卫星通信,然后用无线电通信的点的距离不能超过D超过D的话惠氏通信的成本增加,问在使通信成本就低的情况下求D这题还是最小生成树,用prim算法构造MST,在构造的过程将每次算的最小的权值存到数组f里面,然后按照升序排序。因为卫星通信可以无限远,就是说后m的权值可以不用算,所以答案就是f[p-m].#in

2015-12-31 08:42:54 314

原创 HDU(1087)继续畅通工程

这题还是最小生成树 ==已经修建的道路的权值位0,然后再用克鲁斯卡尔算法#include#include#includeusing namespace std;const int maxn=2000;int p[maxn];struct node{ int u,v,w;};bool cmp(node a,node b){ retu

2015-12-31 08:42:50 254

原创 Uva(10034)

这题是要你求讲所有点连起来的最小的代价是多少。连起两点的代价是两个点之间的距离。。。最基本的最小生成树#include#includestring.h>#include #include#includeusing namespace std;const int maxn=200;int u[maxn*maxn],v[maxn*maxn];double dis

2015-12-31 08:42:46 252

原创 Uva(10305)

这是一道关于拓扑排序的题,并且要输出其中一种拓扑序列#include#include#include#includeusing namespace std;const int maxn=150;int c[maxn];int topo[maxn],t;int G[maxn][maxn];int n,m;bool dfs(int u){ c[u

2015-12-31 08:42:43 435

原创 zoj(1221

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1221这道题前19行给出城市的联通关系比如1 3   2 3 4   3 4 5 6   1 6   1 7   2 12 13   1 8   2 9 10   1 11   1 11   2 12 17   1 14   2 14 15   2 15 16   1

2015-12-31 08:42:39 384

原创 二叉排序树的建立

二叉排序树是一种左子树的值小于根,而右子树的值大于根的的一棵树,通过中序遍历可以得到一个有序的序列= =#include#includestring.h>#include#include#includeusing namespace std;typedef struct node{ int data; struct node *left,*r

2015-12-31 08:42:34 328

原创 Uva(10129)+Uva(10054)

这两道题都是和欧拉图的判定有关,一个是有向图,一个是无向图的欧拉图的判定还有一个是有向图= =先看10129。。。我们把单词的首字母看做是入度,最后一个字符看做是初度,那么这道题就变成图中是否存在欧拉回路。判断有向图的条件是该图是连通图和最多最有两个点的出度不等于入度,其实那两个点就是起点和终点,而且必须是其中一个点的入度比出度恰好大1(作为终点),另一个点的出度比它的入度恰好大1(作为起点)

2015-12-31 08:42:30 1889

原创 Uva 10004(二分图的判定)

这题其实很简单的说,第一次用邻接表来存图= =首先图的储存结构是结构体+head数组。。。其实head数组保存的struct node{ int v; int next;}V[200*200]; 假设现在有u节点,v表示的是和他邻接的点,next保存的是v对应的编号,head数组保存的是链表的头节点编号。比如有1 21 31 4的点边

2015-12-31 08:42:26 252

原创 Uva 10557 XYZZY

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1498题意的意思是给你n个房间,每个房间有一个价值,每个房间可以通向一些其他的房间,然后每个房间可以访问多次= =里面的价值也可以多次取,问你是否能够从1房间走到n房间,走的路程中价值要大于0,初始的价

2015-12-31 08:42:21 363

原创 Uva 705 - Slash Maze

Slash Maze By filling a rectangle with slashes (/) and backslashes ( ), you can generate nice little mazes. Here is an example:As you can see, paths in the maze cannot branch, so the wh

2015-12-31 08:42:17 240

原创 Uva532(三维搜索)

题目链接https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=473= =这题就是就是给你一个三维的图,然后给你一个起点,一个终点,中间有障碍= =问你是否能够从起点走到终点,如果能最少的步数是多少最优解= =用bfs,因为是三维,所以用三个方向数组来来

2015-12-31 08:42:14 246

原创 Uva657 - The die is cast

原题链接https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=598这题就是在一堆*里找X,相邻的X算一个,所以我们可以两次dfs搜索,dfs2搜*有多少堆,dfs2搜一堆*里面有多少个不同的X,然后在按升序把每个堆里面的不同X输出来= =#incl

2015-12-31 08:42:10 239

原创 B. Bear and Three Musketeers

B. Bear and Three Musketeerstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputDo you know a story about the three musk

2015-12-31 08:42:05 263

原创 1092 回文字符串(51nod)

原题链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1092这题其实可以把字符串str反转一下然后再求两个字符串的最长公共子序列的长度,然后len(str)-那个长度就是答案了= =#include#includestring.h>#include#includeusing namespa

2015-12-31 08:42:03 273

原创 1050 循环数组最大子段和

原题链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050如果没有循环的条件,那么我们可以用常规的方法算出最大的字段和max1然后加上循环这个条件,我们可以先求出整个数组的和,然后在求出数组最小子段和,然后然后相减得到max2,然后和ans=max(max1,max2);#include#inc

2015-12-31 08:41:59 273

原创 Bash游戏(博弈)

有一堆石子共有N个。A B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N和K,问最后谁能赢得比赛。例如N = 3,K = 2。无论A如何拿,B都可以拿到最后1颗石子。Input第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)第2 - T + 1行

2015-12-31 08:41:56 308

原创 1095 Anigram单词(51nod)

原题链接:http://www.51nod.com/onlineJudge/questionCode.html#problemId=1095&noticeId=20791老实说这题,我是很不想用字典树,因为不熟~~~但后来没搞出来,就用了字典树。。。。。。。。。。当然得参考一下大神的代码。解法:用map统计相同单词。。。然后把字符串按字典序排序,然后把字符串插入到字典树里面去#

2015-12-31 08:41:52 355

原创 简单的暴力搜索

就是一个国际象棋的棋盘,可以八个方向走,问从起点到终点的最少步数是多少,还给出一个一个点是不可走的,简单的bfs#include#include#include#includestring.h>#include#include using namespace std;int vis[10][10];int dis[8][2]={-1,-1,-1,0,-1,1

2015-12-31 08:41:47 324

原创 CRB and His Birthday(2015多校)

原题链接http://acm.hdu.edu.cn/showproblem.php?pid=5410因为他每买一件物品就会得到Ai颗糖,每买一种物品就会得到Bi颗糖。有两个价值。。所以我们应该先用一次01背包把两个价值统一起来。。。因为01背包中每种物品只能取一次。。。。然后我们用多重背包来决定应该多买哪种物品得到的糖果最多。。。。==#include#includestring.

2015-12-31 08:41:43 305

原创 1126 求递推序列的第N项(51nod)

原题链接http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1126这题我们应该先求出他的周期来。。。。。 for(i=3;i300;i++) { f[i]=((A*f[i-1]+B*f[i-2])%7+7)%7; if(f[i-1]==1&&

2015-12-31 08:41:38 446 1

原创 Arithmetic Sequence(多校第九场)

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5400这题其实就是求有多少公差为d1和公差为d2的等差序列和前半段是公差为d1后半段的公差为d2的序列。。。。。我们可以用个b数组保存序列中相邻两项的和,然后直接查找b数组的值是否等于d1或d2。再来进行处理。。#include#includestring.h>#include

2015-12-31 08:41:34 299

原创 最长回文字串(hdu 3068)

原题链接http://acm.hdu.edu.cn/showproblem.php?pid=3068查找字符串中最长的回文串,我们用到manachar算法。要实现manachar算法我们有有两步要做1:对字符串进行处理,把所有的字符串的长度统一化为奇数。。 1 int l=0; 2 int ans=0; 3 Ma[l++]='$'; 4 M

2015-12-31 08:41:32 299

原创 Wheels(bfs遍历,CERC 2014)

原题链接:http://acm.hnu.cn/online/?action=problem&type=show&id=13397对于每一个已经开始运动的轮子要求它周围和他相接触的轮子的运动状态,然后让那些轮子依次进入队列= =速度关系== 高中学过物理应该都知道吧 1 #include 2 #includestring.h> 3 #include 4 #incl

2015-12-31 08:41:27 236

原创 Sum(构造,枚举)

原题连接http://acm.hnu.cn/online/?action=problem&type=show&id=13396这道题并不难,他已经给出公式了k+k+1+k+2+k+3+....+b=N;我们可得(2*k+d-1)*d=2*N;然后我们从2~根号2*n枚举d,看它是否满足整除关系= = 1 #include 2 #include 3 #include

2015-12-31 08:41:25 309

masm5.0下载

masm5.0下载

2016-04-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除