- 博客(13)
- 资源 (3)
- 收藏
- 关注
原创 poj1002
统计重复个数,很容易想到hash,建立一个int数组,把电话号码的数字形式作为hashcode,数组记录出现的次数。 当有海量数据计算重复次数的时候,我们经常这么做,因为数据量相对于hashcode的范围来说是很大的,所以利用hash数组保存出现次数是划算的。 但是这道题hashcode的范围是0~1000000,而n与hashcode相当或更小,这时候hash数组平均下来就会有很多空间被浪费
2012-04-23 13:53:06 443
原创 poj 3274
#include #include using namespace std; #define N 100003 int n,k,tmp,mask,sum,jump,res; int arr[100005][35]; int h[N]; bool same; int main(){ //streambuf *backup; // ifstream fin; // fin.
2012-04-19 15:58:07 516
原创 poj 3349
1. 采用hash方法,size要是一个大质数。这样可以减少碰撞。 2. hash函数从discuss摘抄如下: 1. 直接相加, 把(总和%大质数)为key. 2. 平方和相加, 把(总和%大质数)为key. 3. 从小到大的顺序, 对v[i]<<(i*3)依次异或, 然后模一个大质数作为key.(by hust07p43) 4. 六个数中非零数的积再乘上一个大质数,然后模一个100w上
2012-04-18 20:35:34 511
原创 poj 1573
模拟题 #include #include using namespace std; int m,n,in,path[12][12],x,y,c1,c2; char board[12][12]; char c; bool proceed(){ if(xm||yn){ c1=path[x][y]-1; c2=0; return false; } int x1,y1; x1=x;
2012-04-16 20:29:42 438
原创 poj 2632
注意数组index跟图中index并不相同,把图垂直翻转一下就可以了,SN方向要对调一下,向左其实是向右,向右是向左。#include #include using namespace std; short board[101][101],from,to; int times; int A,B,N,M,x,y,id,repeat; char c; short px[101],py[101],pc[
2012-04-16 17:13:05 457
原创 poj 2192
依然是字符串的dp,这回建Bool数组dp,dp[i][j]=1表示第一串的前i个和第二串的前j个匹配。 计算dp[i][j],如果a[i]与b[j]相同,则选择一个跟c匹配,只要其子问题dp[i-1][j](选a的进行匹配)或dp[i][j-1](选b的进行匹配)有一个为真就可以。 如果a[i]和b[j]不相同,则看哪一个能匹配,如果能匹配,则相应的子问题能匹配就可以,如果不能匹配,直接为f
2012-04-15 22:08:35 501
原创 poj1159
假设有指针i,j指向字符串的首尾,即初值为0,n-1。 如果字符相等,则总插入次数等于字符串(i+1,j-1)的总插入次数。 如果字符不相等,则有在i处插入一个和j处相等的字符和在j处插入和i处相等的字符两种选择,选择的依据是字符串(i,j-1)总插入次数和字符串(i+1,j)哪个小。 由此子问题和递推关系都有了。 然后是边界条件。设字符串(i,j)总插入次数是res[i][j]。 注意
2012-04-14 19:43:54 1303
原创 poj1080
#include #include using namespace std; int times; char a[101],b[101]; int a_size,b_size; int result[101][101]; int table[5][5]={ {5,-1,-2,-1,-3}, {-1,5,-3,-2,-4}, {-2,-3,5,-2,-2}, {-1,-2,-2,5,-1},
2012-04-14 10:25:18 568
原创 对网上最大字段和dp解法建模的勘误
设有array[1~n],求最大字段和。 而网上的说法是b[j]是array[1~j]的最大字段区间。如果这是子问题,那么当j=n,则b[j]就是最终结果,显然不是这样,不然sum变量是做什么的呢,何况b[n]也没被用来做最终结果。 实际上这个问题的线性解法描述应该是这样的。 有一串数字,程序从头依次逐个地读取。 (1)若这个数是负数,则舍弃继续往下读。 (2)如果是正数,则从这个数开始
2012-04-13 10:58:21 521
转载 Turing机、人工智能以及我们的世界【matrix67.com】
昨天终于读完了《The Annotated Turing》一书,第一次完整地阅读了 Turing 最经典的那篇论文,理解了 Turing 机提出的动机和由此带来的一系列结论。不过,这本书的最大价值,则是让我开始重新认识和思考这个世界。在这里,我想把我以前积累的哲学观点和最近一些新的思考记下来,与大家一同分享。《The Annotated Turing》一书中的一些学术内容,留待以后几篇日志与大家分
2012-04-10 21:39:10 816
原创 linux将输出重定向
用vim想把内容复制到剪切板,"+y没有效果,暂时还没找到解决办法,只好cat之后鼠标复制。 意外的发现一个命令xsel,可以重定义输出,包括到剪切板。感觉很方便,在这里记一下。 使用方法 cat file | xsel -b
2012-04-07 20:28:43 540
转载 有25匹马选出top3
有25匹马,每匹马都以恒定的速度赛跑,当然马与马之间的速度是不相等的,总共有5个赛道,就是说每轮最多只能有5个马同时赛跑。问题是:要确定出跑的最快的前三名马,需要最少多少轮比赛? 7场的方案 分5组 比赛5次 (ABCDE)决出 A1 A2 A3 A4 A5 B1 B2 B3 B4 B5 C1 C2 C3 C4
2012-04-07 19:11:52 2201
原创 杭电1995
群里有人问,我就去做了下。汉诺塔这方面的问题以前也没有考虑过,不过这种肯定是有章可循的。 最先想到的是在汉诺塔move的步骤上检查一下index,如果是所要求的计数就加1. 不过递归方法n=20以上效率就明显降下来了。 汉诺塔的递推式是f(n)=2*f(n-1)+1,这个从递归的方法中也可以总结出来。不过用来当非递归方法可以,对于这道题就用不上了。 对题中的例子手算了一下,
2012-04-06 14:50:14 878
大学生攻克Linux系统教程
2010-03-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人