上一页 1 ··· 44 45 46 47 48 49 50 51 52 ··· 85 下一页
  2012年1月26日
摘要: HDU_1043 老大之前让我研究了一下构造不限定步数的八数码的解,而自己苦于没有可行的套路迟迟没有用代码实现出来,今天又交流了一下忽然顿悟到如果把空位每次都固定在一个位置然后再枚举需要动的数字就可以比较容易地用代码实现出来了。其实后来才发现,也只是想起来容易,敲起来一样很复杂,搞了几个小时才完工-_-||。由于没有去写基本操作的小函数导致代码又臭又长,还出了几个错误导致调了几个小时,回头再和老大一块精简下代码吧。#include<stdio.h>#include<string.h>char q[1010], b[5];int p, g[10];void init(){ 阅读全文
posted @ 2012-01-26 01:42 Staginner 阅读(644) 评论(2) 推荐(0) 编辑
  2012年1月25日
摘要: POJ_1229 这个题目看到之后会有种想dp的感觉,但状态转移很不好搞。而之所以不好搞,就在于?和!的限制过于繁琐,实际上如果是匹配符的话,一配一和一配任意是最好处理的,如果一配有限个就不那么好处理了,因此,一个思路就是把一配有限个转化成一配一和一配任意。 于是,我们把*、?、!重新定义一下: *:含义不变,至少配一个,多则不限。 ?:只能配一个。 !:可以配一个,也可以什么都不配。 这样我们就得到了一个新旧通配符的转换公式:*->*,?->?!!,!->??*。 至此,一配有限个的关系都被我们转化成一配一和一配任意的关系了,剩下的工作就是分情况将转移方程写出来即可。#in 阅读全文
posted @ 2012-01-25 15:08 Staginner 阅读(616) 评论(0) 推荐(0) 编辑
  2012年1月24日
摘要: HNU_11704 这个和POJ的3332十分类似,都是判断一个字符串是否合法,具体怎么想可以参考一下我的另一篇题解,http://www.cnblogs.com/staginner/archive/2012/01/24/2329131.html,代码为了看起来思路清晰一些,所以写得就十分啰嗦了,很多地方是可以简化的。 由于单词很多,如果暴搜判断有无的话时间消耗比较大,不过这个题直接暴搜单词也是过得了的,比较快的方式就是用二分、哈希表、字典树。 此外这个题目好像给出的noun和verb的长度有的是超过6的,不过如果使用字典树记录的话基本是没有问题的,但用哈希表的话就要注意这个长度的问题了... 阅读全文
posted @ 2012-01-24 23:08 Staginner 阅读(312) 评论(0) 推荐(0) 编辑
摘要: HNU_10076 这个和POJ的3332十分类似,都是判断一个字符串是否合法,具体怎么想可以参考一下我的另一篇题解,http://www.cnblogs.com/staginner/archive/2012/01/24/2329131.html,代码为了看起来思路清晰一些,所以写得就十分啰嗦了,很多地方是可以简化的。#include<stdio.h>#include<string.h>#define MAXD 10010char noun[][10] = {"tom", "jerry", "goofy", & 阅读全文
posted @ 2012-01-24 13:52 Staginner 阅读(183) 评论(0) 推荐(0) 编辑
摘要: POJ_3332 以前问过gestapolur有限自动机是什么东东,只记得他和我说过它会在有限的状态之间自己转化,于是就按这个理解写了一下这个题,没想到写出来的程序和discuss里面所谓的DFA还真的很像,只不过它是把我的check()和pattern()两部分合成了一个来写的。 下面还是说说我对这个题目的思考吧。 一开始看到这个题目实际是想去暴力的,枚举所有的不合法情况,然后一一排除即可,但发现这样比较繁琐。后来对问题做了一个转化,想象成一个机器从左向右依次把字符吃进去,并根据实际情况转化模式,对于特定的模式下如果吃进去的是不符合要求的字符,就直接报错就好了。 转化成这样一个思路之... 阅读全文
posted @ 2012-01-24 11:34 Staginner 阅读(674) 评论(0) 推荐(0) 编辑
  2012年1月23日
摘要: SGU_116 一开始用回溯写了一下,发现效率还是很高的,但需要注意不是当前选择的越大就一定越好。 后来看了别人的题解提到了dp的解法,于是便又用dp写了一下,用f[i]表示i最少可以分解为几个超级素数之和,同时用fa[]记录下决策的过程即可。//回溯#include<stdio.h>#include<string.h>#define MAXD 10010#define INF 0x3f3f3f3fint N, isprime[MAXD], prime[MAXD], p, sprime[MAXD], sp, a[MAXD], ans[MAXD], num;void pr 阅读全文
posted @ 2012-01-23 22:13 Staginner 阅读(234) 评论(0) 推荐(0) 编辑
  2012年1月22日
摘要: #include<stdio.h>#include<string.h>void solve(){ int i, j, k, n, ans, cur; cur = 1, ans = 0; scanf("%d", &n); for(i = 0; i < n; i ++) { scanf("%d", &k); cur = (cur * (k % 9)) % 9; ans = (ans + cur) % 9; } printf("%d\n", ans == 0 ? 9 : ans);}int ma 阅读全文
posted @ 2012-01-22 15:03 Staginner 阅读(258) 评论(0) 推荐(0) 编辑
  2012年1月17日
摘要: POJ_1149 这个题目搞得我比较纠结,具体的思想还是看看这篇博客吧。 http://imlazy.ycool.com/post.2059102.html#include<stdio.h>#include<string.h>#define MAXD 110#define MAXM 30010#define MAXm 1010#define INF 10000000int N, M, S, T, e, first[MAXD], work[MAXD], next[MAXM], v[MAXM], flow[MAXM], d[MAXD], q[MAXD];int g[MAXD 阅读全文
posted @ 2012-01-17 01:36 Staginner 阅读(292) 评论(0) 推荐(0) 编辑
  2012年1月13日
摘要: SGU_123 斐波那契数列前n项和为2*F(n+1)-F(n-1)-1。#include<stdio.h>#include<string.h>long long int f[50];int main(){ int i, j, k; f[0] = 0, f[1] = 1; for(i = 2; i <= 41; i ++) f[i] = f[i - 1] + f[i - 2]; while(scanf("%d", &k) == 1) printf("%d\n", f[k + 1] - f[k - 1] - 1 + f 阅读全文
posted @ 2012-01-13 22:46 Staginner 阅读(144) 评论(0) 推荐(0) 编辑
摘要: SGU_117 直接应用快速幂取模即可。#include<stdio.h>#include<string.h>int N, M, K;int pow_mod(int a, int n){ int ans; if(n == 1) return a % K; ans = pow_mod(a, n / 2); ans = ans * ans % K; if(n % 2) return ans * a % K; else return ans;}void solve(){ int i, d, cnt = 0; f... 阅读全文
posted @ 2012-01-13 21:27 Staginner 阅读(209) 评论(0) 推荐(0) 编辑
上一页 1 ··· 44 45 46 47 48 49 50 51 52 ··· 85 下一页