10 2011 档案
摘要:二分密度+bellman-ford判断是否存在负权回路。 a,b,e分别代表每条边的起点、终点、权值,mid为当前密度,cost为点的快乐值 在二分密度时,要注意更新边权为e[i]=e[i]*mid-cost[b[i]] [pascal 代码] VAR A,B,COST:ARRAY[1..100000]OF LONGINT; DIS,E,EE:ARRAY[...
阅读全文
摘要:传说中的买一送一……不解释,详情看POJ2110 [pascal 代码] CONST DX:ARRAY[1..4]OF -1..1=(0,0,1,-1); DY:ARRAY[1..4]OF -1..1=(-1,1,0,0);TYPE LZY=RECORD X,Y:LONGINT; END;VAR ...
阅读全文
摘要:题目大意: 给你一个n×n的矩阵,让你找一条从(1,1)到(n,n)的一条路径,保证路径上经过点的最大值与最小值之差最小,输出这个差值。 题目分析: 典型的二分答案,枚举上下界区间,然后二分差值,求差值的最小值。 [pascal 代码] CONST DX:ARRAY[1..4]OF -1..1=(0,0,1,-1); DY:ARRAY[1..4]OF -1.....
阅读全文
摘要:上次做到那个收入计划的时候就提到了这道题目,在POJ上是让输出方案,并且保证前面的人赋值的书稿尽量多。所以不需要SJ。 具体实现就是先二分出正确的答案,然后根据答案从后往前进行贪心划分。 [pascal 代码] VAR A,WAY:ARRAY[0..100000]OF LONGINT; N,M,L,R,MID,I,J,TOT,T,IT:LONGINT;FUNCTI...
阅读全文
摘要:高考结束后,同学们大都找到了一份临时工作,渴望挣得一些零用钱。从今天起,Matrix67将连续工作N天(1<=N<=100 000)。每一天末他可以领取当天及前面若干天里没有领取的工资,但他总共只有M(1<=M<=N)次领取工资的机会。Matrix67已经知道了在接下来的这N天里每一天他可以赚多少钱。为了避免自己滥用零花钱,他希望知道如何安排领取工资的时间才能使得领到工资最多的那一次工资数额最小。...
阅读全文
摘要:今天下午有位童鞋写这个题用暴力得了50分,感觉十分不爽,于是过来找Kudo求救……碰巧旁边的JAF DTing…… 于是他现学现卖,写了一个Trie树来解决~ [pascal 代码] TYPE LZY=RECORD GOT:LONGINT; NEXT:ARRAY['a'..'z'] OF LONGINT; ...
阅读全文
摘要:刚开始看这道题,总感觉可以对这些动物进行染色,令颜色相同的为一类。但是这样是有漏洞的。当你遇到一个没有染过色的动物,你需要给它染什么颜色呢?不能保证结果是正确的。 这道题目考查的数据结构是并查集。 用father[n],path[n]数组分别记录当前结点的祖先和到祖先的距离。 这里规定距离为0时为同类,为1时表示被祖先吃,为2时表示吃祖先。 初始时每个元素的祖先是自己,距离为0...
阅读全文
摘要:这个题可以用A*算法,这里不深究。主要讲解一下普通BFS+hash判重、双向BFS。1)普通BFS+hash判重普通BFS必须hash判重。如果不判重会出现TLE的杯具(亲历……)具体是这么实现的:每次枚举可以到达的状态,如果不是目标状态,并且没有入队,那么就加入队列,直到找到目标状态为止。在这里用的Cantor展开判重。[pascal 代码]Const aim='123804765';VAR q:array[1..100000]of string; step:array[1..100000]of longint; facs:array[...
阅读全文
摘要:题目要求最小变换次数,从搜索的角度讲,可以用BFS或者迭代加深。第一次写双向BFS,感觉还算标准的。判重的时候直接暴力O(tail)For循环了,不过依然很快~ Const maxn=10000; maxq=100000;Var a:array[0..1,0..maxn]of string; q:array[0..1,0..maxq]of...
阅读全文
摘要:废话不多说,这个题目为二分图最大匹配:把n行每一行看成一个点,共有n个点;把m列每一列看成一个点,共有m个点。当格子为灰色时,把这个格子所属的行的点与列的点连边,这样就构成一个二分图。 VAR cover:array[1..10000]of boolean; link,v:array[1..10000]of longint; map:array[1..10000,1..100]of lon...
阅读全文
摘要:题目的大意是给你一些相同的立方体,共有1..N这些位置,开始每个位置上只含一个立方体,每个立方体标号1..N,然后让你执行p个操作,但只有两种操作:Move(移动)和 Count(计数)。 1)Move,输入格式M x y,意思为将当前位置为x的那些立方体堆叠到当前位置为y的那些立方体上面 2)Count,输入格式 C x,意思为查询当前标号为x的立方体下面堆叠了多少个立方体(不包含它自身) ...
阅读全文
摘要:求树的最长链,用了SPFA+SLF(表示BFS就可以,作者纯属DT) [pascal 代码] Const maxn=100000; maxq=1000000;VAR a,b,e,dis,f:array[1..maxn]of longint; q:array[1..maxq]of longint; vis:array[1...
阅读全文
摘要:这道题可以用树形DP,也可以直接01背包,因为每个物品的附件不能再作为主件,所以选取每个物品就只有这几种可能的情况:不选这个物品、选取这个物品、选取这个物品及它的一个附件、选取这个物品及它的两个附件。很容易地想出来这是个背包问题。 用f[i,j]表示前i件物品用了j元钱获得的最大价值(即重要度与价值的成绩最大),那么状态转移方程是 f[i,j]=max{ f[i-1,j],//不选这件物品 ...
阅读全文
摘要:很早就写过这个题目,那时候看题解写的,说白了就是抄的程序…… 这几天又拿出来看,突然发现并没有想的那么难,大神勿喷…… 用f[i,j,k]表示在第i个时刻的要求中,第一个人在j位置,第二个人在k位置时的最小花费,因为第三个人一定是在上一个时刻要求的位置,所以可以去掉表示第三个人位置的那一维,用req[i]表示第i时刻要求的位置,则在第i时刻,第三个人是在req[i-1]位置上,初始化需要注意。...
阅读全文
摘要:最近做的字符串处理问题比较多,所以这个题目直接用的字符串来处理,不需要高精,只需要注意细节。 [pascal 代码] VAR s,pre:string; cz:boolean; i:longint;Procedure init; begin readln(s); end;Function ysf(ch:char):boolean; ...
阅读全文
摘要:今天很闲,整理一下最近写的很有代表性的题目,拿出来晒晒,勿喷、勿喷呃…… 去年刚刚看到这个题目,愣是没有想出什么办法来,只感觉是个纯数学题,限于水平没有敢写。今年又翻出来看,结果想到了一个简单的办法(再次Orz dxh大神的纯数学方法…) 关于这道题目,里面的积木覆盖顺序一定是前面的挡住后面的,右边的挡住左边的,那么就可以用一个模拟放置积木的算法来画图。当然,放置的顺序是从后往前,从左往右。至于...
阅读全文
摘要:第一次写这种字符串距离型DP,本来DP题目做得就少,权当练习。 这个题目要求字符串A、B扩展串的最短距离 用f[i,j]表示A到i位置,B到j位置的最短距离,则f[i,j]=min{f[i-1,j]+k,f[i,j-1]+k,f[i-1,j-1]+d} 其中d为A[i]与B[j]的ASCII码距离的差的绝对值,即d=abs(ord(a[i])-ord(b[j])),k为题目...
阅读全文
摘要:各种不解释,建图再拓扑判断是否可行 Var map:array[1..40,1..40,0..9]of longint; g,w:array[1..40,1..40]of longint; v,ind:array[-1..19]of longint; q:array[1..10000]of longint; cz:array...
阅读全文
摘要:POJ1861 & ZOJ1542[Network] ZOJ 1203[Swordfish] POJ 1251[Jungle Roads] POJ2031 & ZOJ1718[Building a Space Station] POJ 2421[Constructing Roads] POJ 2349[Arctic Network] POJ 1789[Truck History] P...
阅读全文
摘要:这个题的样例让我大呼坑爹——竟然把Special Judge上的各种情况融合在了一个样例上……再次Orz 这个题就是个MST,但是题目要求是生成树中的最长边最小,所以要用Kruskal,因为Kruskal的算法保证了最小生成树中的最长边最小。 Var a,b,e,f,optx,opty:array[-1..15100]of longint; n,m,max,ans,...
阅读全文
摘要:还是个MST,不过这个读入数据让用Pascal的童鞋很郁闷的说…… Var a,b,e,f:array[1..100000]of longint; n,m,sum,ans:longint;Procedure addgraph(ch1,ch2:char;cost:longint); begin inc(m); a[m]:=ord(ch1)-6...
阅读全文
摘要:开始在各大OJ刷水题。这是一个MST,只是输入数据的时候需要重新构图,其他没什么 p.s. Var a,b,f:array[-1..100000]of longint; e,xx,yy:array[-1..100000]of extended; n,m,cases:longint; sum:extended;Procedure addg...
阅读全文
摘要:MST,不过这个题用Prim可能会快点,表示我写的Kruskal。 两点之间的距离如果比两点半径和小那么建图时把两点距离置为0,这样就保证了重叠和相交的情况。 Var a,b,f:array[1..11000]of longint; e,x,y,z,r:array[1..10000]of extended; n,ans,m:longint; ...
阅读全文
摘要:不解释的MST,把已经有道路的两个村庄之间建一条长度为0的边,然后Kruskal。我开始是把已经有路的村庄合并,WA了 p.s.这个题的Discuss里面楼要倒了…… Var a,b,e,f:array[1..100000]of longint; n,m,sum,ans:longint;Procedure addgraph(x,y,z:longint); begin...
阅读全文
摘要:这个题Prim是比较快的,用Kruskal要700+ms,幸亏时限是2000ms…… 这个题就是建图之后求最小生成树中第p-s小的那条边,用kruskal比较容易理解~ Var a,b,f,x,y:array[1..1000000]of longint; e:array[1..1000000]of extended; n,m,ans,p,s,fu,i:...
阅读全文
摘要:要使派生方案的优劣值最大,分母的值肯定取到最小。另外,要考虑到所有类型对(t0,td)的距离,使得最终派生方案中每种卡车类型都是由其他一种卡车类型派生出来的(最初的卡车类型除外)。这样,如果将每种卡车类型理解成一个无向网中的顶点,所要求的最佳派生方案就是求最小生成树,而分母就是最小生成树的权值。 这个题我用Kruskal TLE了无数次……最后终于鼓起勇气写了Prim。 Const...
阅读全文
摘要:果断Prim不解释。其实Kruskal也可以,刚开始写的时候鉴于内存没敢写。 Const maxn=750;Var codes:array[1..maxn,1..2]of longint; d:array[1..maxn,1..maxn]of longint; lowcost,pre:array[1..maxn]of longint; ...
阅读全文
摘要:这个是个水得不能再水的MST,可是我还WA了两次,原因如下 1.没有看到The input includes several cases. 2.把调试用的无用信息输出到了结果里(呃……脑残了) 引以为戒~~~~~ Const maxn=500;Var codes:array[1..maxn,1..2]of longint; d:arr...
阅读全文
摘要:POJ1122 & ZOJ1053[FDNY to the Rescue!] POJ1511 & ZOJ2008[Invitation Cards] POJ2240 & ZOJ1092[Arbitrage] 博客里都有题解,这里就不加穿越了吧~
阅读全文
摘要:这道题好BT的数据,竟然有两个点距离为0的情况…… 大体意思就是说计算每个消防站离火警位置的最短距离并且输出路径,注意输出的格式为time递增并且中间用tab缩进~ 同时说明,ZOJ的编译器版本会输出CE,不知道为神马……还有ZOJ是有多组数据的 Constmaxn=100;Typelzy=array[0..maxn,0..maxn]of longint;zj=array[0..maxn]o...
阅读全文
摘要:这个题目的意思便是求两遍最短路~Const maxn=1000100; Var sa,sb,se,a,b,e,f,q:array[1..maxn*2]of int64; vis:array[1..maxn*2]of boolean; dis:array[1..maxn*2]of int64; n,m,k,i,j:longint; sum:qword; Procedure init; ...
阅读全文
摘要:这个题目是给你一些货币及其汇率,计算是否存在套汇的嫌疑。Bellman-Ford水之~ Program Arbitrage;Varst:array[-1..300]of string;e,dis:array[-1..6000]of extended;a,b:array[-1..6000]of longint;n,m,tot,i,fu:longint;flag:boolean;Func...
阅读全文
摘要:Type lzy=record zx,zy,yx,yy,color:longint; end;Const maxn=100000;Var q:array[-1..maxn]of lzy; use:array[-1..maxn]of boolean; ans:array[-1..2500...
阅读全文
浙公网安备 33010602011771号