自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

swustacmer

算法学习,算法竞赛

  • 博客(46)
  • 收藏
  • 关注

原创 我和她在大一的时光

ACM一直都是我坚持的目标,从我认识“她”到现在,我一直没有放弃过对“她”的追求。在这条道路上,我尝到了别人不能享受的快乐。同时,我也感受到了“她”的魅力,让我不断地向“她”靠近。     记得我认识“她”是在大一的一个下午,“她”的红色“外衣”吸引了我。那时的我应该还很年少,自己对“她”并不了解。我偷偷的把“她”放进我的书包,在无聊的时候我把“她”拿出来看看,慢慢地,我对于“她”的“柔情”无

2012-11-12 16:25:55 511

原创 hdu 1755 A Number Puzzle

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1755        刚开始看到这个题的时候,看到这个8,于是想到的是8!很小才4万多,不过加上询问次数,就很不乐观了。。。。这个题有点水,可以用暴力过,这个题没有极限数据。。。也就是复杂度为O(8!*2000)。如果我们这么想的话,那么题目中给出K的范围就没有实际意义了(有时候我就喜欢看数据范围,

2012-11-07 20:50:08 605

原创 hdu 1277 全文检索

描述见 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1277   刚开始的想法是KMP算法,因为字符串匹配差不多这个已经是很多的了。。。。但是看着题目中说的关键字最多有10000个,每个字符长度最大60,原文最多有10000个。那么按照KMP算法的时间复杂度,最差的情况下时间复杂度是O(10000*(60+10000))。可想而知,超时那

2012-11-07 13:05:49 303

原创 多重背包【链表写法】

描述请参照上一篇 http://blog.sina.com.cn/s/blog_979e38fc010149me.html具体代码:#include#define N 20typedef struct data{int w,c;struct data *pre;}Data;int W[N],C[N],n,m,now;Data st[10000005];Data *n

2012-11-07 13:05:47 386

原创 多重背包【优先级队列写法】

题目链接:http://poj.org/problem?id=3900   首先声明:本算法不能过这个题,以免耽搁大家的宝贵时间,特此申明!!!不过思想还是挺好的,个人感觉。。。。。   在很久开始学习多重背包的时候,就考虑过,如果背包容量过大(物品'体积'也比较大),而物品的数量过少(当然暴力无法解决的)的时候我们是否还是可以用常规的方法写?比如背包容量为10^9次方,那么常规的方法内存不

2012-11-07 13:05:45 689

原创 hdu 1688 Sightseeing

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1688这个题大概意思是求从s出发,到f的最短路和次短路的条数一共有多少条(注:次短路的长度为最短路+1)解决这个题的办法是:还是开一个二维的数组记录最小值和次小值,和对应的二维数组记录最小值的条数和次小值的条数。其他的和dijkstra做第K短路是差不多,不过还要简单一些,然后统计。代码

2012-11-07 13:05:43 646

原创 【原创】 线段树学习总结

经过了这几天的学习---线段树---收获着实不小,不过解稍微难一点的题还是会有超时的可能,但也算是入门了。我记得在这段时间的学习中,我保持了一个良好的习惯---刚开始的时候不要在网上搜解题报告。这样可以训练你的思考能力,有时候肯能还会和别人的不一样,学习起来就不是那么死板了。这几天的学习大致可以分为4个阶段(区间统计,单点更新,区间更新,区间合并,扫描线(这个只了解到了初级的))。区间统计:

2012-11-07 13:05:41 224

原创 Poj 2886 Who Gets the Most Candi…

题目描述详见:http://poj.org/problem?id=2886本题的解法是:线段树只是当我们删除元素的时候,我们要去推算下一个元素所在的位置。然后直接通过线段树的查找就可了。比如节点里面记录的内容是,左子树中还剩下的元素有多少个,如果我们推算出来了下一个要删除的元素的位置(注:不是编号,是删除元素之后的位置),那么我们通过线段树很快就能查找(线段树求逆序数的思想是一样的)

2012-11-07 13:05:38 229

原创 hdu 1710 Binary Tree Traversals

本题的考点是告诉你二叉树的前序遍历和中序遍历,求后序遍历。我的思路是:因为前序遍历是先遍历祖先在遍历儿子,所以第一个(前序遍历)点一定是根节点。后边依次加入前序遍历中的点,沿着根往下建立,如果待加入的节点的值出现的顺序(中序遍历)在本节点的前面,那么这个点在本节点的左边,否者在右边,知道节点为空,加入节点。后面以此类推,就建立了一棵二叉树。接着后序遍历就可以了……代码如下:#include

2012-11-07 13:05:36 191

原创 2012年04月11日的日记

最后一个控制台游戏进行中

2012-11-07 13:05:34 204

原创 hdu 1584 蜘蛛牌

题意见hdu 1584;本题可以采用递归实现,但是本题本人用的是动归。 基本思路是:如果要找1-10排好序的最小移动距离,那么我们可以抽象来1-1+2-10+(1-2的移动距离),1-2+3-10+(2-3的移动距离,注:是2上面所有的牌都移动到3上)……那么求2-10,3-10等都可以了。所以得出来动态转移方程为Dp[i][j]=Dp[i][k]+map[k][j]+Dp[k+1][j]其中

2012-11-07 13:05:32 322

原创 java版 字典树

package test;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.LinkedList;import java.util.Scanner;class Trie{public int flag;public char ch;

2012-11-07 13:05:30 320

原创 感悟

解法1:#include#includechar str[20];char *get(char *p){char *q=new char[20];int i,len=strlen(p);for(i=0;iq[len-1-i]=p[i];q[i]='\0';return q;}int main(){char *p,str[]={"ABCDEF"};p=get(s

2012-11-07 13:05:28 187

原创 hdu 1063 Exponentiation

题目描述参考杭电。本题需要考虑前导0和后导0,比如0001.2 1.2222还有.222之类的。需要注意的是:当去掉后导0的时候一定要考虑1000和1.0000的关系代码实现:#include#includechar str[100];intn,m,ar[1000],arlen,ans[1000],anslen;//ar是保存初始数据,ans保存中间和结果,anslen为an

2012-11-07 13:05:25 218

原创 堆排序的实现(递归)

代码:#includeint ar[120],n;void init(){int i;for(i=1;iscanf("%d",&ar[i]);}void output(){int i;for(i=1;iprintf("%d ",ar[i]);printf("\n");}void Dfs(int x){//建堆int t;if(2*xDfs(2*x);}

2012-11-07 13:05:23 348

原创 优先队列的使用

代码:#include#include#include//队列头文件using namespace std;struct num{bool operator ()(int x,int y){//比较优先级return x>y;}};priority_queue,num>p;int n;void init(){int x,i;for(i=0;iscanf("

2012-11-07 13:05:21 179

原创 hdu 1501 Zipper

本题描述请参考hdu1501,其大概意思为。给你三个字符串,问前两个是否能合成第三个字符串(注:前两个字符串在第三个字符串中的相对位置不能发生改变)。  解决本题最常规的方法就是用搜索,但是麻烦来了,题目给的范围是1-200。难道这道题不能用?  本人解决这题是用搜索过的,不知道这是否是好的算法,但是跑出来的时间还是让人满意的(0ms)。不过在搜索的同时,加了一个优化--记忆搜过的路径。

2012-11-07 13:05:19 235

原创 剖析我的五子棋

(控制台游戏)本五子棋完全独立完成,其基本构思很基础。分为两个模式(人机对战和人人对战)。详情下次分解……(主要是自己现在还处于测试阶段,完成之后,我会第一时间和大家分享)。

2012-11-07 13:05:16 211

原创 USACO Calf Flac

这个题的大概意思是:给你一个字符串(简单的处理)(小于20000),找出最长的回文子串,再输出它在原文中的位置。   这个题常规的想法是,穷举,时间复杂读O(n^2)下面是代码:#includestruct save{char ch;int i;};save ar[20005];char s,str[20005];int n,Max,begin,end;void de

2012-11-07 13:05:14 191

原创 USACO  Milking Cows

本题的大概意思是这样的:给你N个喂养奶牛的开始时间和结束时间的时间段。问题是:输出最长的喂养时间段和最长的没有喂养的时间段。(友情提示:这些区间可能会有重复)  本题最常用的一种算法使用线段树解。不过我没有采用那种做法,本人采用的是用链表合并记录。先把n个区间排序(开始时间相同的按结束时间排序,否则按开始时间排序)。这样做的好处是我们只需要讨论结束时间就可以了。(因为开始时间大小已经确定了)然

2012-11-07 13:05:12 238

原创 hdu 1854 Q-Sequence

本题描述参考hdu,在这就不叙述了。下面讲讲我的思路和代码:   刚开始的时候,用DFs去做,感觉到有一点难度。因为它的回溯条件不好掌握,所以尝试了很久,反而没有结果。不过用指针去做就不一样了,凡是把字符串中"001"换成"0"在回溯就好多了。然后我们判断如果“只”剩下一个"0"那么就输出"Yes",否则就输出"No"。下面是代码:#include#include#includes

2012-11-07 13:05:10 356

原创 hdu 2005 第几天? java版

Problem Description给定一个日期,输出这个日期是该年的第几天。 Input输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input,另外,可以向你确保所有的输入数据是合法的。 Output对于每组输入数据,输出一行,表示该日期是该年的第几天。 Sample Input1985/1/

2012-11-07 13:05:08 242

原创 hdu 1434 幸福列车

全部代码实现,没有用STL和queue,函数简单明了!!代码实现:#include#include#includestruct train{char name[30];int rp;train *next;};train *head[10005];int n,m;void get(train *&t){t=(train *)malloc(sizeof(train)

2012-11-07 13:05:05 314

原创 hdu 1427 速算24点

本题采用穷举所有情况即可得出结果。我们来计算一下,首先4个数的位置变换有24种,每种加上有运算符4*4*4=64种,每种有六种运算次序,所以时间复杂度24*64*6。对于人工计算,当然是很难得,但是计算机1秒之内是的得出来答案的,并且,还不是每一个都需要这么多次。代码如下:#include#include#define Inf 0xfffffffint num[10],save[10

2012-11-07 13:05:03 260

原创 hdu 1413 文件系统

此题是一个模拟题,做模拟题,分清条件就可以了。本题我是用c++做的,这样我们可以用string要简便一些。加上vector、map,这样本题就简化多了。具体实现看代码:#include#include#include#include#include#includeusing namespace std;struct command{   vector dir;//当前子目

2012-11-07 13:05:01 244

原创 hdu 1332 LC-Display

这个题就是简单的模拟题,我的思路是一层一层的输出,具体输出用函数实现,这样就简单多了!不过代码有点长,我相信这没有什么影响!我把每个数字输出分成了5个部分,这样便于检查和阅读!代码如下:#includechar s[20];int n;void Outputc(char ch){ printf(" "); for(int i=0;i  printf("%c",ch); print

2012-11-07 13:04:59 269

原创 hdu 1317 XYZZY

这个题其实不难1317 XYZZY" TITLE="hdu 1317 XYZZY" />(估计做了之后都这么说)!今天下午错这么多次 不应该呀!以后要注意,特别是在比赛的时候这个情绪要控制。    1317 XYZZY" TITLE="hdu 1317 XYZZY" />   现在看来这些错第一wr,那么多半是变量混用,而re这个应该归于这个题的自环,这个事怪自己没有考虑。显示用邻接

2012-11-07 13:04:57 196

原创 hdu 1285 确定比赛名次

此题是拓扑排序的典型例子!如果一个队没有前驱就选择,然后去掉以这个点为前驱的点.   代码:#include#includestruct team{    inte,next;}ar[20000];int n,fb[505],num[505];int search(){//找没有前驱的点    int i;   for(i=1;i      if(fb[i]==

2012-11-07 13:04:54 197

原创 hdu 1269 迷宫城堡

这道题有个特殊数据当n=1是连通的!这道题考的是有向图的强连通的判定,我的做法是,从i-->n如果i和j是连通的并且j  代码:#include#includestruct path{ int s,e; int next;}ar[100005];int fb[10005],flag[10005],Q[10005];int n;int Judge(int x){    int

2012-11-07 13:04:52 178

原创 hdu 1267 下沙的沙子有几粒?

其实这个题和买票(一些人时50的一些人是100的)是一个意思:动态转移方程:map[i][j]=map[i-1][j]+map[i][j-1] j            map[i][j]=map[i][j-1]   j>=i;代码:#include__int64 n,m,map[25][25];int main(){ int i,j; for(i=1;i  map[i][

2012-11-07 13:04:50 223

原创 hdu 1260 Tickets

这道题没想到会这么快AC,就是初步的想了一下动态转移方程,写了个代码:  动态转移方程为:Dp[0][i]=Min(Dp[0][i-1]+ar[i],Dp[1][i-1]+ar[i]);  Dp[1][i]=Dp[0][i-1]+ans[i-1]-ar[i-1];  其中Dp[1][i]代表这个人和前面一个人一起买的,Dp[0][i]代表自己一个人买的 1260 Tickets" T

2012-11-07 13:04:48 221

原创 hdu 1225 Football Score

简单的排序:此代码是用vector和map做的,用tries应该还快一些#include#include#include#include#include#includeusing namespace std;struct  team{ char name[100]; int score; int kicked; int lost;}ar[2000];int n,now

2012-11-07 13:04:46 199

原创 hdu 1220 Cube

先求每一层的个数,然后求不在同一层的pairs:#includeint n;int get(int x){//求同一层的pairs int i,j; int Count=0; int t=x*x; for(i=0;i  Count+=t-3;  j=0;  t--;  for(j=1;j  {   Count+=t-3;   t--;  }  Count+=t-

2012-11-07 13:04:44 153

原创 hdu 1217 Arbitrage

思路:floyd算法 #include#includeusing namespace std;double map[50][50];string ar[50],s,e;int n;int search(string a){ int i; for(i=0;in;i++) if(a==ar[i])

2012-11-07 13:04:41 296

原创 hdu 1216 Assistance Required

简单的模拟,用数组更简洁:#include#define Max 40005int n,num[3000];struct point{    int x;  int next;}ar[Max];int x;int D(){ int sum=0,t,k,h; h=x; t=ar[x].next; k=ar[x].x; x=ar[x].next; while(t!=-1

2012-11-07 13:04:39 213

原创 求1到n之间素数的个数

本题的n     本题的另一种解法是Dfs+容斥原理,你可以这样想a=sqrt(n)最多不过10000。    首先我们都知道一个合数都可以用多个素数的乘积表示,比如:30=2*3*5.所以我们可以求出合数的个数,再从总数里减去就可以了。这样我们可以减去2的倍数(当然不包括2),3的倍数……。但是我们有发现6既是2的倍数也是3的倍数,这样就产生了容斥原理。下面是代码:   #incl

2012-11-07 13:04:37 6467

原创 搜索+离散化思想

这道题的意思差不多是这样的:有一个人没有事做了,就掷骰子。他连续掷n次,问连续出现大于3的次数大于m的概率是多少?初一咋看不就是把次数找出来,再除以总数不就是答案了么。就没有考虑的用了搜索,结果可想而知--超时。难道我们真的不能用搜索,是否是DP呢?最后我把前面的数都用打表的方式列出来,仔细看了看,真的还没有什么规律呢(不知道是否真的没有规律)!最后又想了想,大于3,那45 6的地位不就是一样的

2012-11-07 13:04:35 308

原创 平衡三进制

给你一个天平,和一些砝码,只是这些砝码有点特殊,它的重量是1,3,9,27,……3^n。让你把一些砝码和一个给定的重量的物体放在左边,另一些砝码放在右边,使天平平衡(每个砝码最多用一个),你会怎么做呢?这是一个很有趣的事,不是吗?这就是用平衡三进制解决最好的一个例子:   比如我们假设这个物体的重量是20,那么我们可以这样做。首先我们把20(十进制)转化为三进制(202),然后我们按照一定的规

2012-11-07 13:04:33 1286

原创 算术表达式

此算术运算是利用栈具体实现,并且是整数运算:#include#include#define Inf 0xfffffffusing namespace std;stack p;stack q;int num1,num2,num;int Caculate(char s){//具体执行运算switch(s){case '+':num=num1+num2;break;case

2012-11-07 13:04:31 270

原创 二叉树的宽度

昨天晚上帮同学看代码,发现了一个新的方法,想了又想还是把它写下来。下面就是算法的代码:#include#include#define Max_size 1000struct Tree{//存节点信息    char ch;    Tree *l,*r;};Tree *root;struct Queue{//队列    Tree *data;}ar[Max_size];

2012-11-07 13:04:29 308

空空如也

空空如也

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

TA关注的人

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