自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 问答 (1)
  • 收藏
  • 关注

原创 POJ1200 Crazy Search(hash)

题意:给一个有nc种字符的字符串,要求它有几个大小为n的子串。要点:字符串长度可以是16000000但字符总数最多300,所以hash是必不可少的。先将nc种字符一一对应到hash数组中,只存入第一次出现的位置,使每一个字符都对应这0---nc-1的一个数字,然后是重点:将长度为n的子串看作n位的nc进制数,将问题转化为共有多少种十进制数字,用数组记录,最后遍历子串即可。

2016-04-30 09:28:22 506

原创 POJ3349 Snowflake Snow Snowflakes(hash)

题意:雪花有六条棱,每条棱对应一个数,要求在一组雪花中看能否寻找到所有棱对应相同的雪花(棱有顺序要求)。要点:刚自学了一下hash,这题刚上手有点思路但自己实在也写不出来,看了网上的代码觉得还是很简单的。首先这题只要用取余hash即可,将每条棱求和进行取余hash,然后用m[sum]记录有几个雪花sum相同,然后用snow[sum][m[sum]]存储这个雪花即可,还是比较简单的,这题

2016-04-28 19:40:46 445

原创 数据结构——哈希表

哈希表是一种十分高效的统计

2016-04-28 17:40:57 361

原创 例题10-2 UVa12169 Disgruntled Judge(拓展欧几里德)

题意:看白书要点:再一个办法就是枚举a,利用x1,x3求出b,判断所有x的关系能不能满足a,b。如何通过a,x1,x3求出b呢。x2 = (a * x1 + b) % 10001;x3 = (a * x2 + b) % 10001;联立2个式子x3 = (a * (a * x1 + b) % 10001 + b ) % 10001;x3 =

2016-04-27 16:45:24 419

原创 例题10-4 UVa10791 Minimum Sum LCM(最小公倍数的最小和)

题意:看白书要点:运用唯一分解定理,使每个ai^pi作为一个单独的整数时最优。例如72=8*9时最优。注意:如果本身是一个素数最后还要+1,而且如果本身分解后只有一种因子,最后也要+1,如1=1*1,答案是2。一开始我担心时间想用线性筛什么的,后来发现做不出,看了一下题解发现只要普通的遍除即可,现在做题因为担心时间有点畏手畏脚了啊,其实一般的题上去莽就可以了。#includ

2016-04-26 10:28:49 566

原创 例题10-1 UVa11582 Colossal Fibonacci Numbers!(同余与模算术)

题意:看白书要点:先斐波那契数列打个表,然后用同余与模算术,找个规律就行。注意数的最大值为2^64,用long long型还不够,必须要用unsigned long long型。#include#include#include#includeint fibo[1025][8000];int g[1025];int pow_mod(unsigned long l

2016-04-25 21:50:58 522

原创 ZOJ3785 What day is that day?(同余与模算术)

题意:今天星期六,求1^1+2^2……N^N天后是星期几要点;很明显是同余与模算术,用白书上的复杂度为O(logn)的算法。一开始我是想打表,但这题不能开数组,范围太大。后来我也想到找规律了,但我只打了30个的表,而规律从42开始,点背啊!下次注意了,打表尽量打多一点,而且注意一下排版让规律找起来比较方便。这题就是以42为一组循环,后面没问题了。#include#incl

2016-04-24 21:55:05 629

原创 ZOJ3778 Talented Chef(贪心)

题意:要做n道菜,每道菜有a[i]个步骤,厨师每次可以操作m个步骤,求最小需要几次把菜做完。要点:就是小学搞过的摊饼问题,一个饼要几分钟这样。可以这样思考:如果m>=n,那肯定就是所有a[i]中的最大值max作为结果。如果m贪心思想:贪心的将每一分钟的操作都不浪费的去做菜就能达到最贪心的点,也就是最小消耗。那么这个时候的最小消耗就是:sum/m(如果是整除)sum/m+1(如果是不

2016-04-23 22:16:42 639

原创 省赛第一次选拔赛

就是第11届浙江省省赛的套题,总共11题,A了3题,排第25,中途就走了,其实那道同模取余题我是可以做出的,找规律我也想到了,但tmd我只打了30个的表,规律是第48个后出现,点背啊!!!其他也没什么,主要是水题花的时间比较多,有些题题意不是很清楚卡了一下。比较理想的情况是能做出5题,继续努力吧。

2016-04-23 21:59:10 322

原创 POJ1017 Packets(贪心)

题意:有高度相同,底面积为1*1,2*2,3*3……6*6的产品,包裹底面积是6*6的,求最小的包裹数。要点:很明显是贪心,思路比较好理清楚,就是优先选大的产品,注意都是向上取整。15425287Seasonal1017Accepted164K16MSC++594B2016-04-22 22:17:47#inc

2016-04-22 22:37:32 523

原创 POJ1067 取石子游戏(威佐夫博弈)

题意:中文题不解释。要点:第一道博弈论题啊,这种题做过了就很好做了,代码很好写。这题是威佐夫博弈判断先手输赢,看了一下还是很简单的,就是记住第一个值是差值的1.618倍,注意第一个值要比第二个值小。参考博客:点击打开链接15423535Seasonal1067Accepted176K16MSC++354B2016-04-2

2016-04-22 14:54:11 423

原创 POJ2002&&POJ3432 Squares(二分||hash)

题意:给出一系列坐标,求最多可以组成多少个正方形要点:可以用二分或者哈希,哈希我不会,以后学一下。二分比较简单,以两个点作为参考边,可以通过全等三角形得出剩下两个点的坐标。然后二分查找是否存在即可。已知: (x1,y1) (x2,y2)则: x3=x1+(y1-y2) y3= y1-(x1-x2)x4=x2+(y1-y2) y4= y2-(x1-x2)或x3=x1-

2016-04-22 14:20:16 417

原创 POJ1064 Cable master(二分)

题意:给出n根电缆,长度在1cm~100km之间,要求截断成k根长度为m的电缆,求m的最大值,注意小于1cm的就不能截断了。要点:明显的二分题,但是要注意精度,如果按m做要考虑精度损失,所以干脆全转换为cm,这样就是整数二分。还要注意这题没有说电缆要全部用完,所以二分求最大值的过程中如果num>k时这个区间也是合法的,求最大值也应该在其中求。参考博客:点击打开链接

2016-04-21 09:09:42 465

原创 POJ2253 Frogger(最短路径)

题意:青蛙想从一个石子跳到另一个石子,中间有很多石子,要求青蛙跳跃距离应为路径中最大的距离,现在要求所有路径中最小的跳跃距离,就是求所有路径中最大距离的最小值。要点:可以用最短路径做,用Floyd算法,不断往里加点,只不过这次dis数组表示最大距离的最小值,而用max(map[i][k], map[k][j]))取路径中的最大跳跃距离,这种比较好理解,网上也有很多用dijkstra算法

2016-04-20 17:12:32 1209 1

原创 POJ2823 Sliding Window(单调队列)

题意:给一列数,用一个长度为k的区间在这列区间上从左到右移动,求出每个区间中的最大值和最小值。要点:单调队列,主要应用是存储最值,每次找最值只要看队头即可,否则每次都要遍历一次肯定超时。其实直接考单调队列的地方不多,主要是用它优化一些DP什么的。这题主要是注意一下因为区间更新,有时候队头会不在区间内,所以每次都要更新队头。参考博客:点击打开链接手造单调队列:

2016-04-19 22:02:25 297

原创 POJ2115 C Looooops(拓展欧几里德)

题意:要求a不断加c到达b,如果a大于2^k就mod2^k,求最少要加几次c。要点:拓展欧几里德算法求最小整数解,就是个模板。不过要注意计算2^k时因为超出int范围所以必须先强制类型转换:(__int64)1 15409053Seasonal2115Accepted164K0MSC++633B2016-04-19 09:20

2016-04-19 09:26:21 368

原创 POJ1061 青蛙的约会(拓展欧几里德)

题意:中文题不解释要点:拓展欧几里德求最小整数解问题,一开始在怎么取最小整数解的问题上卡了,同余这块也得学了。参考博客:点击打开链接15408079Seasonal1061Accepted164K0MSC++588B2016-04-18 21:50:45#include#include#include

2016-04-18 22:09:31 417

原创 欧几里德与拓展欧几里德算法

做poj1061的时候接触到了拓展欧几里德算法,所以查阅了一下白书和网上的解释,现在整理一下。欧几里德算法:欧几里德算法比较简单,就是俗称辗转相除法的一直求两个数的最大公约数的算法,关键在于:gcd(a,b)=gcd(b,a mod b),与边界条件gcd(a,0)=a结合就可以递归求得结果。核心代码:int gcd(int a, int b){ return b == 0 ?

2016-04-18 14:07:36 392

原创 POJ2796 Feel Good(单调栈)

题意:给出一列数据,要求一个区间内最小值与区间内数据总和乘积最大值要点:还是单调栈,这次我自己写的,先做了几题比较简单的果然还是有效果的,这题也是一样,按点遍历,网上大神做的是直接遍历一次即可,我看不太懂,还是自己写了一个往两侧寻找边界的,比较好理解,注意这题可以开一个sum数组存储第i个数据前的和,这样降低了复杂度,这是一个比较方便的技巧,注意sum数组也要设成long long型,

2016-04-17 14:24:18 537

原创 POJ2559 Largest Rectangle in a Histogram(单调栈)

题意:给出一组矩形的高,求最多能拼成矩形的最大面积,看图就很清楚了。要点:还是单调栈,现在有点感觉了,单调栈大概就是能求出当前值左右的比它大或小的数的范围。这题用高度作为单调栈,分别往左右找比当前高度大的数的范围,最后求个面积即可。15402130Seasonal2559Accepted1440K157MSC++823B201

2016-04-17 11:17:59 399

原创 POJ3250 Bad Hair Day(单调栈)

题意:给出一列牛的高度,所有牛只能往右看,且只能看到高度比自己低的牛的发型,并且如果出现高度大于自己的牛,后面的牛就再也看不到了,求所有牛能看到其他牛的发型总和。要点:刚刚教了单调栈和单调队列,虽然原理了解了,但是还是无法很好的转化,这就需要练习了。这题主要是看到牛的总数与被看到的牛的数量是相等的,所以直接用单调递减栈,当前数与单调栈内的所有数比较,遍历弹出一遍后剩下的数就是能看到自己

2016-04-17 09:51:24 358

原创 POJ3159 Candies(最短路径:SPFA+链表+栈)

题意:有n个同学分糖,给m组数据i,j,k,要求第j个同学分到的糖不能比第i个同学分到的糖多于k个。要求第1个同学与第n个同学之间糖的个数差距最大,求最大的差距。要点:这题思路不难,既然要求1~n的差距最大,那每组数据刚好取k,整个就是一个最短路问题,dis数组存储的就是最多拿到的糖。但这题时间卡的实在是太紧,SPFA用STL都会超时,而且数据太大,必须要用邻接表存储边。所以看了一下网

2016-04-14 16:58:28 595

原创 POJ1062 昂贵的聘礼(最短路径)

题意:中文题要点:等级比较难处理,注意题目中是间接接触也不行,所以假如酋长等级是5,差距为2,可以交换的等级有(3,4,5),(4,5,6),(5,6,7),也即是区间长度是m,交换中最大的与最小的差为m。所以枚举等级区间,所有可行的区间dijkstra一遍,求总的最小值。还要注意这题每个点最短路径求出后要加上当前点物品价值,最后求最小。15386959

2016-04-13 16:40:39 437

原创 POJ2502 Subway(最短路径)

题意:从家到学校,给出家和学校的坐标,可以做地铁或走路,走路10KM/H,坐地铁40KM/H,地铁有很多条线路,每条线路之间有很多站点,给出每个站点的坐标(都是整数),要求到学校需要最短的分钟数(四舍五入后取整)要点:这题的输入简直日了狗了,线路的数目是以EOF结尾的,完全没办法验证数据。简单的说就是用一个map数组存储从点i到j需要的时间,然后Floyd模板即可。关键这个map数组不

2016-04-13 08:20:06 642

原创 POJ3268 Silver Cow Party(最短路径)

题意:每个农场有一头牛,现在要到农场x开派对,路径是单向的,要求开完派对后还要回到原农场,求所有牛的最短路径的最大值要点:就是一个定终点求最短路径的变形,现在已经知道终点,从终点回到原农场的最短路径很好求,直接dijkstra算法即可,想求原农场到终点的最短路径只要将所有的单向路反向即可。利用函数的参量传递可以比较方便的求出。15382144Season

2016-04-12 14:48:55 483

原创 POJ2240 Arbitrage(最短路径:SPFA||Floyd)

题意:还是套汇问题,换货币看能不能增加钱要点:还是求负权回路,这题没有规定从哪边出发,所以Floyd算法比较好,但我刚学了一下spfa算法,强行用了一下也可以。SPFA算法详解:点击打开链接SPFA算法:15380850Seasonal2240Accepted280K47MSC++1448B2016-04-12 08:

2016-04-12 08:52:58 452

原创 POJ1860 Currency Exchange(最短路径)

题意::有n种货币,m种兑换方式,每次兑换是这样计算的:如果一开始有V单位b货币,Rab是从a换到b的汇率,Cab是交换需要的手续费,最后能换到(V-Cab)*Rab单位b货币。一开始的货币种类是s,要求最后换回s,问能否进行一系列兑换,使最后换回s时钱增加。要点:如果能够经过一个回路返回起点使钱增加,那么可以经过无数次回路,使钱无限增多。所以就转化为bellman算法求是否有负权回路

2016-04-11 07:11:01 403

原创 第一次校赛总结

搞了ACM快大半年了,虽然有点小成就,但还是弱的很。学校组织了一次校赛,我自不量力的去参加了一下,结果确实惨,就A了一道水题。说实在的,看了一下结题报告确实不是像我这种水平的能做的,都是没见过的算法,不会做也着实正常,毕竟我才大一,这比赛主要还是针对大二大三的。其实最后做下来,12道题里我有三道题是可以做的,但一道N过大需要离散化结果一直WA,一道线性筛我倒是刚做过,但这题稍微变形了一下,结果一直

2016-04-10 20:56:18 382

原创 POJ3259 Wormholes(最短路径)

题意;有n个农场,m条双向路,之中有w个虫洞,虫洞为单向路,从起点到终点耗时反而是负数,求能否追上自己也就是判断是否有负权回路。要点:负权回路就是回路的权值之和为负数的意思,只要出现负权回路了,无论什么算法都是求不出最短路径的。这里学习了一下bellman—ford算法,dijkstra算法虽然很好写,但是是无法处理有负权的最短路径的,而bellman—ford算法可以算出有负权的最短

2016-04-09 10:24:13 385

原创 POJ1502 MPI Maelstrom(最短路径)

题意:邻接矩阵表示一个无向图,因此只给一半,x代表无法从i到j。要点:最短路径水题,用dijkstra直接过了,现在主要是练习一下bellman-ford算法和spfa算法。dijkstra算法:15369258Seasonal1502Accepted208K0MSC++995B2016-04-08 20:39:57

2016-04-08 20:50:23 453

原创 POJ1125 Stockbroker Grapevine(最短路径)

题意:这题真难读懂,简单来说就是n个经理人,每个经理人认识其他的一些经理人,要交流情报,每个经理人只能与认识的人交流,并且交流需要时间,要求从那个经理人开始传情报能使最慢收到情报的经理人耗时最短,输出最短时间要点:就是一个Floyd的模板问题,就是题目难懂了一点。15368826Seasonal1125Accepted208K0MSC

2016-04-08 19:21:42 384

原创 POJ2387 Til the Cows Come Home(最短路径)

题意:输入一个图,给出每条边的权值,以1为起点,要求到n的最短路径。要点:今天学了一下最短路,有好多种算法,估计要做好长一段时间了。这题就是最简单的模板,就是稍微注意一下可能有重边。参考博客:点击打开链接  点击打开链接dijkstra算法:15365926Seasonal2387Accepted4164K63MSC++852B

2016-04-07 22:42:00 414

原创 线性筛法求素数

求素数是比较基本的内容,有时候我们会需要打一个素数表。一般如果n比较小我们会使用(%2~sqrtn)这种算法,简单但是时间耗费很多,复杂度是O(n^2)。这里介绍一种筛选求素数法,基本要点是,如果找到一个素数如3,那么就往后筛出所有3的倍数。一般筛选求素数:void init(){ memset(prim, true, sizeof(notprim)); for (int i = 2

2016-04-07 08:10:05 670

原创 贪心法经典问题总结

乘船问题:要点什么的看白书,解释的已经很详细了。从这道题我们可以证明贪心法不会丢失最优解,因此可以通过贪心得到最优解。题目:点击打开链接#include#include#include#includeusing namespace std;int main(){ int t,w,n,i,j; int a[305]; scanf("%d", &t); whi

2016-04-06 16:27:03 1030

原创 POJ3067 Japan(归并排序)

void merge_sort(int a[],int x,int y,int t[])//注意这里[x,y),y是取不到的{ if (y - x > 1) { int m = x + (y - x) / 2; int p = x, q = m, i = x; merge_sort(a, x, m, t);//先递归分治 merge_sort(a, m, y, t); w

2016-04-05 22:28:50 410

原创 POJ2479&&POJ2593 Maximum sum&&Max Sequence(最大连续和)

题意:一组数列,分成两组,求怎么分使两组分别的连续最大和加起来最大,输出总和要点:最大连续和的一个简单变形,先从左往右求一次dp,将对应的当前最大值存储下来。然后从右往左dp一次,计算最大值即可。POJ2479:15350322Seasonal2479Accepted564K438MSC++645B2016-04-04 1

2016-04-04 10:59:40 387

原创 最大连续和

这个问题对我来说还挺难的,当初做DP时水过去了,但没彻底理解,这次打算好好分析一下,争取彻底搞懂。首先,像:1 -1 2 2 3 -3 4 -4 5 -5这样的数列,想要找连续最大和,可以有很多种方法,从最慢的枚举O(n^3)到最快的动态规划O(n),毫无疑问,我们要选择复杂度低的算法。所以我这里就只分析两种:分治法O(nlogn)和动态规划O(n)。分治法O(nlogn):

2016-04-03 16:24:51 356

原创 POJ2421 Constructing Roads(最小生成树)

题意:村庄之间连通,要求输出最小权值和,注意有些村庄已经连通要点:Prim算法稍微变一下,因为是求权值和,已经连通的之间权值改为0即可,反正为0后面算的时候肯定是最小值,会加入集合的,然后权值又是0不影响。15347342Seasonal2421Accepted208K32MSC++826B2016-04-03 14:36:1

2016-04-03 15:02:03 344

原创 POJ2377 Bad Cowtractors(最大生成树)

题意:连接农场,要求输出最大权值和并且不能连成环,如果不能全部连接,输出-1要点;就是最小生成树变成最大罢了,Kruskal算法,排序改成从大到小,一次AC。15347152Seasonal2377Accepted412K63MSC++881B2016-04-03 13:27:46#include#inclu

2016-04-03 14:00:51 349

原创 POJ2395 Out of Hay(最小生成树)

题意:农场之间相互连接,要求输出最小连通中最长的那条边的权值要点:又是一道模板题,POJ上最小生成树咋这么多水题,要做点难的啊。15347115Seasonal2395Accepted292K79MSC++892B2016-04-03 13:07:56#include#include#inclu

2016-04-03 13:10:44 456

空空如也

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

TA关注的人

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