
ACM
文章平均质量分 58
sunacmer
这个作者很懒,什么都没留下…
展开
-
SPOJ 2. Prime Generator
素数判断算法,最简单的为试除法,即若要判断一个数n是否为素数,则判断从2~sqrt(n)的数中的每个数m是否能被n整除,若能整除(n%m==0)则n明显不是素数,否则即为素数。只搜索到sqrt(n),可以通过下面的例子理解,假设n=100,1*100=1002*50=1004*25=1005*20=10010*10=10020*5=10025*4=10050*2=100100*原创 2012-04-02 14:00:46 · 933 阅读 · 0 评论 -
POJ1426 Find The Multiple
考查:广度优先搜索提交情况:1次RE,队列设的太小了,开始为100000,后来改为1100000就好了1次WA,将scanf和printf改为cin和cout就好了AC_CODE:#include #define MAX 100000using namespace std;int n;void bfs(){ int front=0,rear=0; l原创 2009-02-26 10:31:00 · 769 阅读 · 1 评论 -
POJ3087 Shuffle'm Up
考查:好像不是BFS提交:1次WA收获:最后判别不可能是经过N次洗牌后s1和s2和开始相同AC_CODE:#include #include char s1[110],s2[110],temp[210],dest[210],b[110],c[110];int k,n,step;void bfs(int num){ step=1; strcpy(b,s1)原创 2009-02-26 16:57:00 · 528 阅读 · 0 评论 -
POJ3414 Pots
考查:BFS提交:220K 16MS1次MLE,visit数组开始设为MAX了,后来改为visit[101][101]就过了收获:这次的收获也还是很大的,首先,当从队列中的一个状态可以到达很多状态的时候,通过循环、switch进行状态的遍历,之后吧该状态的节点入队,接着置访问数组true(老忘~),和上次三维BFS的差不多。AC_CODE:#include #inclu原创 2009-02-28 15:17:00 · 2016 阅读 · 0 评论 -
POJ 2479
考查:动态规划提交情况:3次WA 循环的控制收获:对动态规划有了一个比较朦胧的认识,自己暂时觉得动态规划解决的一个大问题就是将问题中的重复子问题的结果保存下来,然后查找。具体查找时,则和数组的索引等有一定的关系。AC_CODE:#include #define MIN -9999999int main(){ int T; scanf("%d",&T)原创 2009-09-09 17:36:00 · 976 阅读 · 0 评论 -
POJ2406 Power Strings
考查:KMP提交情况:1次AC收获:对KMP算法有了一个深入的认识 尤其是算法中的next数组设文本为T={t1,t2...tn},模式为P={p1,p2...pn},则KMP算法的大概思想就是提前计算出在字符处匹配中遇到前q个字符匹配而第q+1个字符不匹配时,模式P需要移动的位置数。在算法导论中,引入了一个数组π,用于保存这样的信息。π[m]的含义就是既是Pm的前缀又是Pm的真后缀的原创 2010-01-12 15:28:00 · 1416 阅读 · 1 评论 -
POJ2965 The Pilots Brothers' refrigerator
考查:BFS提交情况:一次AC时间:313MS 内存:1672K代码:#include typedef struct _n{ int n; int step;}node;typedef struct _p{ int row; int col; int pre;}path;node queue[65536];int visit[65536];path paths[65536];int num;int map[16]={ 0x111f,0x原创 2011-03-14 10:02:00 · 652 阅读 · 0 评论 -
POJ1328 Radar Installation
考查:贪心提交情况:大概10次WA说一下我碰到的错误:1.需要考虑d2.算法中sum++;pivot=intervals[i].r;之前写成了pivot=intervals[i].l3.main函数中,t之前定义为int了4.main函数中的f没有在每次case时加以改变,所以如果第一次的结果为-1,则以后的结果就都是-1了一些小问题,真是悲剧。#include #include typedef struct _i{ double l,r;}invterval;int n;inv原创 2011-03-15 17:54:00 · 506 阅读 · 0 评论 -
POJ3264 Balanced Lineup
考查:RMQ ST算法提交情况:N次WA 1704MS提交了很多次都是WA,最后发现是类型转换的问题,一开始rmq()中的k=log((double)(r-l+1))/log(2.0),应该是(int)(log((double)(r-l+1))/log(2.0)),真是悲剧。所以原创 2011-07-22 16:54:48 · 547 阅读 · 0 评论 -
POJ3278 Catch That Cow
考查点:广度优先搜索提交情况:一次WAAC_CODE:#include #define MAX 100001int n,k;typedef struct Node{ int v,step;};void bfs(){ bool visit[MAX]; for(int i=0;i<MAX;i++) visit[i]=false; Node que原创 2009-02-24 22:02:00 · 462 阅读 · 0 评论 -
POJ2251 Dungeon Master
考查点:广度优先搜索提交情况:1次RE收获:对广度优先又有了更深刻的认识AC_CODE:#include #define MAX 40typedef struct dungeon { char cell[MAX][MAX]; bool visit[MAX][MAX];};typedef struct position{ int x,y,z,ste原创 2009-02-23 21:25:00 · 885 阅读 · 1 评论 -
POJ1125 Stockbroker Grapevine
考查点:最短路径提交情况:1次WA收获:学会了Floyd算法,用于求所有点之间的最短路径AC_CODE:#include #define MAX 101int A[MAX][MAX],edges[MAX][MAX],B[MAX];void floyd(int n){ for(int i=0;i for(int j=0;j A[i][j]=edges[i][原创 2008-10-11 00:44:00 · 836 阅读 · 0 评论 -
北大acm1005
之前就做过一次,是在复习考研之前了,当时就在想找到半径和年份的函数关系,但竟然一直没找出来~牛人别笑我啊~后来,复习高数,看到微分方程的时候一下子想到原来是这么简单一个数学题,但直到刚才才来做~如果设半圆的面积为s,半径为r,则数学关系即ds/dt=50,而ds=2*PI*rdr,所以微分方程即为2*PI*rdr=dt(不知道怎么打数学符号^_^),从而解得t=PI*r2/100+C,而初值可以原创 2008-09-19 12:07:00 · 1016 阅读 · 3 评论 -
北大acm1008
这是一个历法问题,刚开始看的时候好像挺吓人的,其实就是整除和取余~呵呵。基本思想就是从Haab历中算出总天数,然后整除和取余到Tzolkin历中就好了。记一下一些小东西(代码中注意的东西)定义一个整型的变量n,则cin>>n的时候,如果在终端输入10...,则此时n的值仍为10,cin好像认识类型~getchar()把不需要的字符从输入中删掉输入字符串时,代码中可以定义一个字符数组char ar原创 2008-09-19 12:17:00 · 1294 阅读 · 2 评论 -
POJ 1611
已经几天没做题了,前几天在看动态规划,但觉得动态规划好像太博大精深了,形式多种多样,复杂的时候可以很复杂,而简单的时候又很简单,具体问题要很具体的分析,没有一个很固定的架子。什么时候有时间了再继续看,昨天开始看了下并查集。并查集也是一种集合,支持的操作有查找某个元素属于哪个集合和集合的快速合并。是用树实现的,这里的树是用顺序存储即数组实现的,具体为用一个数组记录某个元素父亲的下标,看了很多说并查集原创 2008-09-30 10:11:00 · 2113 阅读 · 0 评论 -
POJ 2524
题目:2524考查点:并查集提交情况:WA printf("Case %d: %d",counter++,num);//忘了写/n (老忘~~)WA 一开始num初始化到循环外面了,结果每个Case个数就弄错了 (粗心~)RE 是parent数组太小了,可能在Judge的时候越界了 RE好像是指针或越界等问题小记:根据具体实现不同,我把parent全初始化为-1,集合个数最后即为小于0的个数。和1原创 2008-09-30 13:25:00 · 1507 阅读 · 1 评论 -
POJ 1251 Jungle Roads
考查点:最小生成树提交情况:一次ACAC_Code:#include #define MAX 27#define MAXCOST 101using namespace std;int vertices[MAX],lowcost[MAX],minv,totalcost;int edges[MAX][MAX];bool visited[MAX];int prim(int vertex_num,int原创 2008-10-07 13:41:00 · 1004 阅读 · 0 评论 -
POJ1789 Truck History
考查点:最小生成树提交情况:2次REAC_Code:#include using namespace std;bool visited[2001];int dis,mini,totaldistance,lowcost[2001];int cal_distance(char *a,char *b){ dis=0; for(int i=0;i if(a[i]!=b[i])原创 2008-10-07 21:17:00 · 880 阅读 · 1 评论 -
POJ2485 Highways
考查点:最小生成树提交情况:1次AC所得:如何用sanf输入一个二维数组,在元素前仍要加“&”AC_Code:#include #define MAX 501bool visited[MAX];int lowcost[MAX],ways[MAX][MAX],longest,min;int prim(int n){ int v; longest=0; visited[0]=true原创 2008-10-07 22:25:00 · 527 阅读 · 0 评论 -
POJ1258 Agri-Net
考查点:最小生成树提交情况:1次TLE 2次WA收获:当有多组数据而题目中没有说什么情况下退出时,用while(scanf()!=EOF)判断,否则TLE~AC_CODE:#include bool visited[101];int lowcost[101],mincost,roads[101][101],min;int prim(int n){ int min_v; visited[原创 2008-10-07 23:05:00 · 577 阅读 · 0 评论 -
POJ1050 To the Max
考查:动态规划 最大子段和提交情况:一次AC收获:又认识了下最大连续子段和在一维情况下最大连续子段和的求法是从左到有顺序扫描数据,以0为边界,当累加和小于0时则重置为0.动态规划的状态转移方程为s=max{si-1+ai,ai},该方程和前面的描述是等价的。本题是对一维最大子段和的扩展,思路是从上到下找出所有的连续行(如第i行到第j行),然后计算每列从第i行到第j行的和,之后对这n原创 2010-02-16 15:11:00 · 4449 阅读 · 2 评论 -
SPOJ 5. The Next Palindrome
大于某个数K的最小回文数,做的很纠结~对很多python细节还不是很熟。测试了找到的所有用例,结果是对的,但提交是TLE,暂时不管了,先放到这了。主要分K中数字为1个和多个两种情况考虑1. 如果K只含有一个数字,则结果就为K+1,当K=9时结果为112. 当数字个数大于1时,将K分为两部分,并将前半部分对称到后半部分得到P。这个时候又要考虑两种情况: a. 如果得到的新数原创 2012-03-27 17:05:07 · 1142 阅读 · 0 评论 -
SPOJ 11. Factorial
题目要求计算n!的尾数中0的个数。对一个数n进行质因数分解,只有2和5相乘才能使结果中出现0,所以可以看分解的结果中2和5的个数即可,而2的个数明显会多于5,所以只要计算出5的个数即可。具体算法为用n不断除以5,直到商为0为止,然后再把之前的商都加起来。如算100!,则100/5=20, 20/5=4, 4/5=0,那么最终结果就为20+4+0=24.#include int main()原创 2012-04-06 23:50:48 · 1114 阅读 · 0 评论 -
POJ2533 Longest Ordered Subsequence 最长升序子序列
最长升序子序列一般有两种解法,一种是经典的动态规划方法,复杂度为O(n^2),另外一种方法则借助栈和二分查找,复杂度为O(nlgn)。动态规划设d[i]表示以a[i]结尾的最长升序子序列的长度,则可以得到状态转移方程为d[i]=max{1,max{d[j]}+1},其中j原创 2011-10-06 14:57:04 · 2029 阅读 · 0 评论 -
POJ1001 Exponentiation
考查:大数乘法 字符串操作提交:1次CE 一次AC 0MS其实本科的时候就做这道题了,但一直留到现在了,包括1002,终于把这两个遗留了这么长时间的题过了~记得当时在网上看到过这个题,用字符串模拟乘法运算时的代码很简洁,但这次却没找到,凭记忆大概写了下。需要注意的是题目要求,如100.00 2要输出10000,不要点。另外需要注意的基本上都写在了注释中。#include #include char R[7];int n,dot;char a[150];char ans[150];vo原创 2011-04-01 21:30:00 · 2147 阅读 · 0 评论 -
POJ1204 Word Puzzles
<br />考查:AC自动机<br />提交:1次AC 1594MS<br />第二道AC自动机的题目,对AC自动机fail指针的构造和含义以及查找有了一点新的认识,写了一些在注释中。代码参考了http://hi.baidu.com/aconly/blog/item/fa6dc7344fd6901890ef3941.html<br />另外,发现用C++提交的时间是1547MS,GCC是1500MS,G++是1594MS,好像GCC会快点,不过也有可能是服务器的原因~<br />#include <stdi原创 2011-03-23 17:30:00 · 1517 阅读 · 0 评论 -
HDU2222 Keywords Search
<br />考查:多串匹配 AC自动机<br />提交:3次TLE 一次WA 203MS<br />第一道AC自动机题目,AC自动机(Aho-Corasick automation)是用来解决多串匹配问题的算法。而KMP的解决单串匹配的,即在给定的文本中找到搜索的关键字和它们的位置,而如果需要在一段给定的文本中同时搜索多个关键字的话就需要用到AC自动机了。<br />AC自动机是基于Trie实现的,首先需要建立一颗关键字的Trie树,这里需要注意的是为要搜索的关键字建树而不是文本串,在建立完树后就需要建立f原创 2011-03-22 21:56:00 · 608 阅读 · 0 评论 -
POJ2528 Mayor's posters
<br />考查:离散化 线段树<br />提交情况:1次RE 1次AC 250MS<br />第一道线段树和离散化的题目,收获不少,但也还有很多问题仍然不是很明白。对于离散化在这道题目中的作用,自己的理解是减少建立线段树时的区间大小,因为建立线段树时需要的空间是和其区间大小有关系的,《算法艺术与信息学竞赛》中说其节点数是区间长度的两倍。而如果对[1,10000000]建立树的话,很明显不可以,但又因为区间的数量N不超过10000,所以可以把用到的数(包括每个区间的左端点和右端点)都拿出来进行排序,然后统计原创 2011-03-18 21:19:00 · 489 阅读 · 0 评论 -
POJ1007 DNA Sorting
<br />提交情况:1次AC<br />考察点:逆序数<br />编译一次通过,也是一次AC,比较顺利。当然题目也比较简单。原来的代码(逆序数为O(n2))<br />#include <stdio.h>#include <algorithm>typedef struct _node{ int noi; char a[51];}node;void cal(node *d,int n,int m){ int i,j,t; while(m--) { t=0原创 2010-09-06 16:31:00 · 827 阅读 · 0 评论 -
POJ 1080
考查:LCS 动态规划提交情况:1次AC对状态转移方程又有了一个稍微深入的理解,但还差很远。对LCS的三种情况在这里的运用还没太懂。对于LCS,算法导论中的结论是,设两个字符串X={x0,x1...xm},Y={y0,y1...yn}和它们的最长公共子序列Z={z0,z1...zk},则:(1)xm=yn,那么可得到zk=xm=yn且zk-1是Xm-1和Yn-1的一个最长公共子序列原创 2010-01-11 19:36:00 · 1189 阅读 · 0 评论 -
POJ2420 A Star not a Tree?
考查点:费马点费马点定义为平面多边形内到各个顶点距离和最小的点。网上的方法均为模拟退火算法,之前做毕设的时候大概接触过模拟退火(Simulated Annealing),它是一种基于概率的数学优化算法,数学优化算法有很多种,比如遗传算法等,但模拟退火和遗传算法的区别是它是一个原创 2011-10-05 16:49:09 · 1541 阅读 · 0 评论 -
HDU4006 The kth great number
收获:STL优先权队列priority_queue,greater >中greater建立的顺序是从小到大排列,而less则是从大到小排列。另外,greater >最后的应该是> >中间必须有一个空格,不知道为什么,编译错误了N多次,无语死了。但是在VC里即便没有空格也可以通过。原创 2011-10-05 18:18:13 · 620 阅读 · 0 评论 -
POJ1330 Nearest Common Ancestors
方法:dfs+并查集LCA问题一般是用Tarjan算法来解决,其实对于这道题而言的话只需要用dfs+并查集就可以了。用一句话说就是在深度优先遍历树中节点u的时候,当遍历完u的每个孩子后将u和孩子节点进行合并(union)。合并的时候需要注意的是不能用并查集的rank优化,原创 2011-10-07 17:50:11 · 493 阅读 · 0 评论 -
SPOJ 1. Life, the Universe, and Everything
题目很简单,就是可能会对输入比较迷惑。题目中的输入给出了42之后的数字,所以会想是不是要把所有的输入先存起来,然后再处理,其实可以一边输入一边处理,碰到42后就停止,可以忽略42之后的输入。#include int main(){ int d; while(scanf("%d",&d),d!=42) printf("%d\n",d); return 0;}python原创 2012-03-25 12:07:43 · 991 阅读 · 2 评论 -
SPOJ 4. Transform the Expression
将中缀表达式转换为后缀表达式,大家应该都很熟悉。具体过程为先为可能出现的括号和操作符('(','+','-','*','/‘,'^'等)赋一个优先级,其中'('优先级最低。然后顺次扫描输入的表达式(即字符串),1. 碰到'('时,直接入栈2. 碰到操作符时,如果优先级大于栈顶操作符的优先级,则入栈,否则将其直接输出3. 碰到')'时,将栈中的所有操作符出栈直到碰到'('时为止,但并不输原创 2012-03-26 17:42:30 · 733 阅读 · 0 评论 -
POJ3041 Asteroids
考查:二分图最大匹配 最小顶点覆盖提交情况:1次WA 一次AC二分图最大匹配的问题一般用匈牙利算法解决,自己对匈牙利算法的理解就是在图中的每个点进行深度优先遍历,找到一条增广路径,然后对增光路径进行取反,直到找不到增广路径为止。因为增广路径是由不在匹配中的边和在匹配中的边交叉组成的,所以每反转一次匹配数就会增加1.具体的内容可以看下面的文章,说得非常好。http://www.byvoi原创 2011-03-17 19:24:00 · 505 阅读 · 0 评论 -
POJ1351 Number of Locks 记忆化搜索
第二道记忆化搜索的题目。其实一直都没搞太明白,这道题好像也比较冷门,网上资料也不多,主要有:http://blog.youkuaiyun.com/scorpiocj/article/details/6642177http://hi.baidu.com/xiangsanzi/blo原创 2011-10-09 19:42:52 · 968 阅读 · 0 评论 -
如何写出很牛的代码,提高你的代码质量?
转自http://blog.youkuaiyun.com/yashiz/article/details/1035005首先要使用C/C++的灵活性,然后要了解,写这些代码,是为了提高效率,而不是做show,好,现在就开始吧。No1:scanf(" ")这里一个空格表示跳一个转载 2011-10-09 16:28:29 · 1154 阅读 · 2 评论 -
HDU1520 Anniversary party
这里有一个对树形dp简单的介绍:http://wenku.baidu.com/view/03d35d1c59eef8c75fbfb3b4.html暂时的理解是如果题目中的数据具有层次结构(如树)等,且要求最优解,则可以考虑使用树形dp。这道题可以简单的描述为有一些数据之间原创 2011-10-08 18:44:06 · 1535 阅读 · 0 评论 -
POJ2186 Popular Cows
强连通分量+点压缩强连通分量是指非强连通图中的极大强连通子图,求强连通分量的算法常用的有Tarjan和Kosaraju两种,它们的复杂度均为O(n+m),n图中点的个数,m为边的个数。只看了下Tarjan,没有仔细了解Kosaraju。这里有对Tarjan比较详细的说明,说的原创 2011-10-07 21:47:00 · 491 阅读 · 0 评论