一周学习总结4.26

二分查找,在stdlib.h中有相应的函数bsearch,原型定义为:

void *bsearch(const void *key,const void *base, size_t nmem, size_t size, int (*comp)(const void *, const void*));

comp函数根据需要自己定义。

 

这周就是乱做题了,没有很明确的学什么。大概分了一下方向,以后可能会专门做DP方面的题目。

 

POJ 1936 All in All:好水的题。字符串比较。可为什么我第一反应就是LCS还有KMP?

 

POJ 1159 Palindrome:求最少要加几个字符才能构成回文。一开始是想求前一半和后一半的LCS。其实直接求整个字符串与其逆序字符串的LCS就好了。最后用总的长度减去LCS的长度就可以得到所要的结果。写DP还是感觉比较好啊。最大流搞得郁闷死。

 

POJ 1200 Crazy Search:貌似是hash?可我用黑书上的elfhash死活TLE.……然后看了某牛的代码,以NC进制根据子串直接计算位置,用个标志数组。

 

POJ 1789 Truck History:MST,type codes中不同个字符数即是距离。一开始输入的时候每次调用函数求distance,结果1400MS+,后来改在主函数中直接求,才280MS。

 

POJ 1503 Integer Inquiry:无聊的高精度加法,我又在水了……

 

POJ 2503 Babelfish:qsort+bsearch。用qsort对foreign排序,再用bsearch查找foreign,输出相应的english。

 

POJ 1026 Cipher:模拟题。一开始的想法是模拟整个过程,对每个明文进行k轮循环,马上就想到如果k很大的话这种方法是不现实的。这里用到置换群的知识,我的离散数学烂啊。对每个字符变换位置,一定会产生循环,即置换m次会回到原来位置。那么我们只要对每个字符a[i]求其mi,用k%mi就得到有效的置换次数,大大降低了复杂度。这题没什么难度,只是输入输出很讨厌……

 

POJ 1002 487-3279:很久以前一直没过的题。其实说起来也没什么困难的算法,把输入的字母转化为数字,排序,计数,输出。但是有蛮多细节的。现在很怕做模拟题,总是不知道错在哪里。感觉是很考察编程功底的题目。以前都不知道这题有中文版,“北京大学程序设计实习2007”呵呵。

 

POJ 1061 青蛙的约会:就是解同余式……递归实现扩展的欧几里德除法……我对这种东西很不感冒。其实是因为我数学太烂了。这学期上数论听得云里雾里,汗啊。

 

POJ 1260 Pearls:感觉不是很难的DP,可是却写的很郁闷,思路混乱。太久没写DP的原因吗?

 

POJ 1862 Stripies:看到水题很难忍住啊……汗,我也就是写写水题的程度了。排序,然后用最大的和次大的算出一个结果,再用这个结果和第三大的算出第二个结果,再用第二个结果和第四大的算出第三个结果……如此类推,就能算出所要求的结果。

POJ 1221 UNIMODAL PALINDROMIC DECOMPOSITIONS:汗死,要是不看某牛的代码,估计永远都写不出来。构造二维数组a[i][j],i表示数值1——n,j表示长度为j的回文序列个数。j>i/2+1的都只有1个;i为奇数a[i][j/2]=1,i为偶数a[i][j/2]=2;前i/2个可以根据以前推得的求出a[i][j]=a[i-2*j][j] + a[i] [j+1]。(j=i/2-1 to 1)。真的是神奇的题目,牛们还说是水题。只能说明我太差了……    

 

POJ 1852 Ants:还是相当有迷惑性。那个相碰会掉头的条件很诡异,想清楚就简单了。其实掉头和不掉头是一样一样的~每只蚂蚁爬的时间都有两个,较短的和较长的。对每只蚂蚁求两个时间,分别找最大值。那么较短的最大值就是最快,较长的最大值就是最慢。

 

POJ 3094 Quicksum:从柱同学那边找来的。水啊!好像没什么可说的。discuss里面有一句话蛮不错:这个世界并不缺少水题 只是我们缺少一双发现水题的眼睛……

 

POJ 1338 Ugly Numbers:题目本身并不难。取一个已有的数分别×2,×3,×5,换下一个数……这样一直下去就好了。题目要求的是第n个,所以最后的序列要保证递增顺序。用堆来做,开始时把1加入堆,每次从堆中弹出一个数i(这个数是有序的且和已弹出的数的顺序不会再改变),把i加入队列p,再把i*2,i*3,i*5加入堆。重复1500次。对每个n直接输出p[n]就好了。第一次学用STL,用了vector和priority_queue,参考了别人的用法……真的是很方便的东西。

 

POJ 3117 World Cup:好吧,其实很简单,也是从柱同学那里找来的水题。设总比赛n场,第i队胜xi场,平yi场,得分si,根据条件可以得到两个方程:3*∑xi+∑yi=2*∑si ,2*∑xi+∑yi=2*n。解出∑yi=6*n-2*∑si。打平的场数就是(∑yi)/2。注意n可以等于0。不能写成while(scanf(“%d %d”,&t,&n)&&t&&n)。

 

POJ 3671 Dining Cows:和以前做的一题差不多,将一列只含1、2的串变成有序的最少需要改变数字。由左向右求i左边2的个数n2[i],自右向左求i右边1的个数n1[i]。最后找到min(n2[i]+n1[i])-1就是结果。

 

终于100题了。开始的时候觉得100题是那么遥远,现在居然已经完成了。说不清楚是什么感觉……只是一步步走下去吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值