- 博客(137)
- 资源 (2)
- 收藏
- 关注

转载 搞ACM的你伤不起啊
劳资六年前开始搞ACM啊!!!!!!!!!! 从此踏上了尼玛不归路啊!!!!!!!!!!!! 谁特么跟劳资讲算法是程序设计的核心啊!!!!!! 尼玛除了面试题就没见过用算法的地方啊!!!!!! 谁再跟劳资讲算法之美算法的力量,劳资一本算法导论拍死你啊!!!!!!!! 那是搞ACM的入门书啊!!!!特么的入门书就一千多页啊!!!!!!! 还没有习题答案啊,学完了你特么都不知道
2012-04-09 18:31:02
791
原创 poj 3026 Borg Maze
链接:点击打开链接参考链接:点击打开链接一个m*n的迷宫,#代表墙,空格代表数字,S是起点,里面有一些字母A,从起点开始找出一条最短路使这些字母链接起来。首先就要想到prim,因为求链接这些字母的最短距离,不就是一个赤裸裸的最小生成树吗,但是字母与字母的距离我们不知道,所以需要用BFS,把这些字母之间的距离搜出来,基本这道题就是这样做啦。注意:6 5 #
2013-08-22 13:42:04
489
原创 poj 1789 Truck History
链接:点击打开链接用一个7位的string代表一个编号,两个编号之间的distance代表这两个编号之间不同字母的个数。一个编号只能由另一个编号“衍生”出来,代价是这两个编号之间相应的distance,现在要找出一个“衍生”方案,使得总代价最小,也就是distance之和最小。#include#include#include#includeusing namespace std;
2013-08-20 14:18:42
407
原创 poj 2031 Building a Space Station
链接:点击打开链接给你一些圆的圆心坐标和半径,如果两个圆相交,那么这两个圆就是联通的,如果不相交,就需要一条直线连接两个圆,让你求出使这些圆联通的最短的直线长度。#include#include#include#includeusing namespace std;#define INF 0x7f7f7f7fstruct node{ double x,y,z,r;}ano
2013-08-20 13:03:06
428
原创 poj 1679 The Unique MST
链接:点击打开链接题意是:求最小生成树,若不唯一则输出'Not Unique!'.。否则输出那个最小权值和。用prime算法,设一个v[]数组,初值0;每次找到的点的放进集合中厚v[i]为1;若找到的集合到外面的最小边有多条(即外面有多个点到集合的最小距离都等于该最小距离)时把其中一条放进去,其他的v[]值为3,记录该点以后一定要以此边进入集合。否则不唯一。另外,集合有多个点到到一个点的距离都
2013-08-19 12:40:58
369
原创 poj 2253 Frogger
链接:点击打开链接题意:就是一个青蛙想找另外一个青蛙,但是一下他跳不到那里去,所以需要借助其他石头,找出跳到另外一个青蛙的总最小距离,在从中找出跳一次的最小距离。输出这个JUMP的最小距离呢。因为prim每次找的都是从这点找最小的距离跳的,所以每次记录这个最小距离,然后与下一次比较,直到跳到另外一个青蛙的石头上为止。#include#include#include#includeu
2013-08-18 12:25:22
401
原创 poj 2075 Tangled in Cables
链接:点击打开链接给n个房子,你需要在房子之间铺电缆,使所有的房子都连上,求最短的电缆,#include#include#include#include#includeusing namespace std;const float INF=0xffffff;float edge[510][510],len;int nn,vis[510];void prime(int x)
2013-08-18 12:13:54
452
原创 poj 1258 Agri-Net
链接:点击打开链接prim模板题,求联通的最小距离。#include#include#include#include#includeusing namespace std;const int INF=0xffffff;int edge[110][110];int nn,vis[110];void prime(int x){ int i,j,k; int sum_i,m
2013-08-18 12:07:46
387
原创 hdu 3367 Pseudoforest
链接:点击打开链接求图的权值最大并且一个环的子图。最大生成树,但又与最大生成树有点不同,这也可以有一个环的出现。所以我们要加个标记数组,当查找的两个点,父亲节点不同,并且只有一个有环,或者都没有环,就把权值相加,然后合并。如果相同,但没环,也把权值相加。最后得出的就是有一个环的最大生成树。#include#include#include#includeusing namespa
2013-08-18 12:05:58
481
原创 hdu 2988 Dark roads
链接:点击打开链接就是说每天街每天开路灯,非常耗钱,想省钱,但又不想让市民觉得不安全,就两条相连的街开个路灯,求每晚能省多少钱,首先给个N,M,代表N条街,M条路,接下来N行,每一行三个数X,Y,Z,代表X街与Y街相连,每天消耗Z元,由于边很多,所以用Kruskal,用边的总权值减去Kruskal求出来的最小权值就是每天省下的钱。#include#include#include#in
2013-08-17 18:29:57
607
原创 hdu 1162 Eddy's picture
链接:点击打开链接给你点的横坐标,纵坐标,让你找一条最短的路把这些点连起来。#include#include#include#includeusing namespace std;const double INF=0xffffff;double edge[105][105];int nn,vis[105];void prime(int x){ int i,j,k; do
2013-08-17 15:55:58
502
原创 hdu 3371 Connect the Cities
链接:点击打开链接连接城市,给你M个城市,有M条道路,还有K个城市相连,接下来M行,P与Q城市相连花费C,然后接下来K行,首先有一个数T,代表有T个城市相连,然后给胡相连城市的ID。简单的prim,不过用C++提交可以过,但用G++,就会超时,不超时要自己写一个scanf函数。#include#include#include#include#includeusing name
2013-08-17 15:50:57
385
原创 poj 2478 Farey Sequence
链接:点击打开链接以前比赛看到过的一道题,以为是规律题,没做出来。然后学了欧拉函数,一看到这题,就知道思路,把10^6打一个表出来。prime[i]=prime[i]+phi[i]。其实大哥表就知道规律啦。#include#include#includeusing namespace std;#define maxn 1000010__int64 phi[maxn],prime[
2013-08-16 17:33:34
459
原创 山东省第四届ACM-H Boring Counting
链接:点击打开链接题意:给你n个数,m个询问(N and M (1 ),询问包含四个数L,R,A,B 求区间[L,R]里面在区间[A,B]的数的个数。思路:首先想到的是而且的树状数组,或者线段树处理,因为数据量太大。但是二维这个维数也不能表示,因为离散化之后50000*50000是不能表示的,那怎么办呢?划分树,我们只要二分枚举该区间的最小的第几大大于等
2013-08-16 16:56:01
669
原创 poj 2773 Happy 2006
链接:点击打开链接找第K个与m互质的数,把这个数输出。gcd(b×t+a,b)=gcd(a,b) (t为任意整数)则如果a与b互素,则b×t+a与b也一定互素,如果a与b不互素,则b×t+a与b也一定不互素故与m互素的数对m取模具有周期性,则根据这个方法我们就可以很快的求出第k个与m互素的数假设小于m的数且与m互素的数有k个,其中第i个是ai,则第m×k+i与m互素的
2013-08-16 15:45:57
421
原创 poj 2484 A Funny Game
链接:点击打开链接刚开始一看是巴什博弈,一交果断WA,在一看题目,发现是移完硬币,位置还是不变的,又只能移一个,或相连的两个,推一下就发现除了1和2是Alice赢,其他都是Bob赢。#include#includeusing namespace std;int main(){ int n; while(~scanf("%d",&n)&&n){ if(n!=1&&n!=2
2013-08-12 20:08:59
473
原创 hdu 1847 Good Luck in CET-4 Everybody!
链接:点击打开链接我是暴力打表,根据前面推后面:推n,只要看n减比n小的2的幂次得出的结果,只要有一个是Cici赢,那么n就是Kiki赢。#include#include#includeusing namespace std;int main(){ int f[10],i,n,mark[1100],j; f[0]=1; for(i=1;i<10;i++) f[i]=
2013-08-12 18:40:14
434
原创 hdu 2177 取(2堆)石子游戏
链接:点击打开链接威佐夫博弈变异,要求输出能赢的售后第一次能取得情况。3.一定存在规则允许的某种操作可将必胜点移动到必败点;证明:以某个必胜点(i,j)为例。因为所有自然数都会出现在某个必败点中,故要么i等于m(k),要么j等于n(k)。若i=m(k),j>n(k),可从j中取走j-n(k)个石子到达必败点;若i=m(k),jm(k),j=n(k),可从i中取走i-m(k)个石
2013-08-12 17:25:32
467
原创 hdu 2509 Be the Winner
链接:点击打开链接尼姆博弈:有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。 这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细分析一下,(1,2,3)也
2013-08-12 16:10:11
444
原创 hdu 1527 取石子游戏
链接:点击打开链接威佐夫博弈:前几个必败点如下:(0,0),(1,2),(3,5),(4,7),(6,10),(8,13)……可以发现,对于第k个必败点(m(k),n(k))来说,m(k)是前面没有出现过的最小自然数,n(k)=m(k)+k。一个必败点有如下性质:1.所有自然数都会且仅会出现在一个必败点中;证明:m(k)是前面没有出现过的最小自然数,自然
2013-08-12 16:04:53
459
原创 poj 1151 Atlantis
链接:点击打开链接同样也是求矩形的面积和,线段树+离散化+扫描线,根据hdu 覆盖面积改过来的。不过出现一个问题,用%.2lf不能过,改为%.2f就过啦。#include#include#include#include#includeusing namespace std;#define N 1100struct node1{ double x,y1,y2;
2013-08-11 20:12:44
362
原创 poj 1389 Area of Simple Polygons
链接:点击打开链接 没看题意,应该就给你多个矩形,让你求出总面积,覆盖多次的算一次。其实和hdu 覆盖的面积差不多,线段树+离散化+扫描线。poj 1151的代码改一下就过啦,这三道题基本就是一样的。 #include#include#include#include#includeusing namespace std;#define N 11000str
2013-08-11 20:07:55
549
原创 poj 2973 Scrabble
链接:点击打开链接判断最后一个字符串是否可以组成前面的字符串,输出可以组成的数量,‘_’代表可以任意字母。In the first test case, PIZZA, ZA and PITA can be spelled as PIZ_A, ZA and PI_A. There are not enough letters to spell PROGRAM or CONTEST.
2013-08-11 16:29:19
667
原创 poj 2192 Zipper
链接:判断2个字符串能否组成1个字符串,例如cat和tree能组成tcraete。搜索和DP都可以。#include#include#includeusing namespace std;char str1[210],str2[210],str3[420],str4[420];int len1,len2,len3,n,vis[420],flag;int check(){
2013-08-11 16:23:28
521
原创 poj 2001 Shortest Prefixes
链接:点击打开链接给你一些字符串,输出字符串本身的唯一前缀。字典树模板题。#include#include#include#include using namespace std;#define MAX 26struct trie{ struct trie *next[MAX]; int num; };trie *root;int n;void bulidtrie(
2013-08-11 16:19:44
392
原创 poj 1936 All in All
链接:点击打开链接判断前面这个字符串是否在后面字符串出现,可以不连续,但一定要和前面这个字符串是相同的序列。一个暴力。#include#include#includeusing namespace std;char a[100010],b[100010];int main(){ int i,len1,len2,j,flag; while(~scanf("%s %s",a,b)
2013-08-11 16:16:51
396
原创 poj 1509 Glass Beads
链接:点击打开链接给你一个字符串,把看成一个圆串,从哪里拆开,可以使整个字符串的字典序最小,输出拆开那个字母的位置。最小表示法:对于一个字符串S,求S的循环的同构字符串S’中字典序最小的一个。#include #include #includeusing namespace std;/*用最小表示法求字符串S的最小字典序返回字典序最小的串的首字母位置*/int Mi
2013-08-11 16:11:49
440
原创 poj 1159 Palindrome
链接:点击打开链接判断加几个字符可以组成回文串,DP,找出原串和反串的最长公共子串,原串的长度减去最长公共字串的长度。#include#include#include#includeusing namespace std;int max(int a,int b){ return a>b?a:b; }short int dp[5001][5001];int main(){
2013-08-11 16:00:11
427
原创 poj 1056 IMMEDIATE DECODABILITY
链接:点击打开链接判断一个是否字符串是另一个的前缀。最多8个字符串,最少两个,纯暴力,说好的字典树了。#include#include#include#includeusing namespace std;char a[10][10];int main(){ int i,j,k,num,m,len1,len2,flag,x; i=0; x=1; while(
2013-08-11 15:55:06
514
原创 poj 1226 Substrings
链接:点击打开链接(1)函数原型:extern char *strstr(char *str1, char *str2); 功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。判断一个子串是否在一个字符串中出现(2)原型:char *strcpy(char *dest, char *src); 功能:把src所指由'\0'结束的字符串复制到de
2013-08-10 15:07:38
358
原创 2010湖南省C题
问题描述定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数 。例如,34是17的倍数,因为3-20=-17是17的倍数;201不是17的倍数,因为20-5=15不是17的倍数。输入一个正整数n,你的任务是判断它是否是17的倍数。输入输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1
2013-08-08 19:44:25
700
原创 2010湖南省B题
弟弟的作业时间限制: 1000 ms 内存限制: 65535 K问题描述你的弟弟刚做完了“100以内数的加减法”这部分的作业,请你帮他检查一下。每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中a和b是作业中给出的,均为不超过100的非负整数;c是弟弟算出的答案,可能是不超过200的非负整数,也可能是单个字符"?",表示他不会算。输入输入文件包含不超过100行,以文件结束符结尾。每行
2013-08-08 19:40:55
442
原创 2011ACM湖南省省赛K题 RMQ with Shifts
问题描述In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query (L, R) (L<=R), we report the minimum value among A[L], A[L+1], …, A[R]. Note that the indi
2013-08-07 15:50:02
729
原创 FZU 2105 Digits Count
链接:点击打开链接 四个操作,或,与,异或,求和。成段更新。 如果相邻两个数经过操作之后变成相同的数了,那么再经过覆盖了该区间的操作时,那么他们的值将同时发生改变,变成另外一个相同的值,这多次操作下去,之后将生更多的相同的数字区间,这里的相同数字就是懒惰标记更新的关键:例如:OR 6 0 3, A=[6 6 6 7]; 其中6出现了3次#inc
2013-08-06 18:50:22
604
原创 poj 3667 Hotel
链接:点击打开链接给定N个连续的房间,最初的时候全部是空的,接下来m个操作,总共有一下两种操作:1、 a:询问是不是有连续长度为a的空房间,有的话住进最左边2 、a b:将[a,a+b-1]的房间清空基础的区间合并和覆盖问题,维护四个域:懒惰标记setv,区间最值maxv,从左端点开始的连续的最大房间数lmax,从右端点开始的连续的最大房间数rmax#inc
2013-08-06 10:38:27
317
原创 poj 3264 Balanced Lineup
链接:点击打开链接大水题一个。这周的线段树训练,恐怕就是这道最水啦。。。。#include#include#include#includeusing namespace std;#define N 50010struct node{ int l; int r; int min; int max; }anode[4*N];int date
2013-08-04 18:58:22
386
原创 poj 2777 Count Color
链接:点击打开链接两种操作,C A B C是A到B中涂颜色C,P A B 是A到B区间有几种颜色。成段更新。需要注意的是这里没讲A一定大于B。#include#include#include#includeusing namespace std;#define N 100010struct node{ int l; int r; int c; }
2013-08-04 18:54:11
395
原创 hdu 2665 Kth number || poj 2761 Feed the dogs || poj 2104 K-th Number
都是划分树加线段树。划分树定义为,它的每一个节点保存区间[lft,rht]所有元素,元素顺序与原数组(输入)相同,但是,两个子树的元素为该节点所有元素排序后(rht-lft+1)/2个进入左子树,其余的到右子树,同时维护一个num域,num[i]表示lft->i这个点有多少个进入了左子树。三个代码基本一样,就只有输入不同,第二个和第三个一样:#include#includ
2013-08-04 09:39:29
607
原创 poj 3277 City Horizon
链接:点击打开链接求在同一水平线上的矩形面积。与HDU 1255 覆盖面积有点类似。#include#include#include#includeusing namespace std;#define N 40010 int line[2*N],a[N],b[N],h[N];struct node{ int l; int r; int c;
2013-08-04 09:31:49
534
原创 hdu 1255 覆盖的面积
链接:点击打开链接求覆盖两次和两次以上的面积,扫描线加线段树。#include#include#include#include#includeusing namespace std;#define N 5010#define SB 1e-8struct node1{ double x,y1,y2; int flag; }a[N];struct no
2013-08-04 09:26:53
431
采用非mvc框架的书店管理系统
2014-09-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人