上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 17 下一页

2012年5月5日

POJ 2407 Relatives

摘要: 欧拉函数的应用,素数定理;看了DISCUSS中那段超短的代码后才明白欧拉函数直接解决,我之前想的是集合中的容斥定理,实际上这里欧拉公式也实质上就是容斥定理;另外用了刚学的优化的筛法计算素数表。# include <stdio.h># define N 1000005int m;char pt[N];int p[N/10];void build_ptable(void);int solve(int n);int main(){ int n; build_ptable(); while (~scanf("%d", &n) && n) prin 阅读全文

posted @ 2012-05-05 14:48 getgoing 阅读(237) 评论(0) 推荐(0) 编辑

2012年5月2日

[TLE] POJ 1730 Perfect Pth Powers

摘要: 给出一个32位整型数 n,形如 n = x^p 的最大的 p;质因数分解;TLE,DISCUSS 中有的用枚举做的(要考虑浮点数精度问题),但是质因数分解应该也可以啊,为什么老是TLE?求大牛指点。# include <stdio.h># include <math.h>int gcd(int a, int b){return !b ? a:gcd(b, a%b);}int m;char t[60005];int p[10005];void solve(long long int n);void build_ptable(void);int main(){ long l 阅读全文

posted @ 2012-05-02 22:02 getgoing 阅读(243) 评论(0) 推荐(0) 编辑

POJ 2262 Goldbach's Conjecture

摘要: 在 1000000 以内验证哥德巴赫猜想:筛法求素数;为了减少空间,可能要用素数定理,但这道题空间足够了;1WA,太着急了没注意到输入为 0 时结束。# include <stdio.h># define MAXN 1000000int m;int ptable[MAXN+1], p[MAXN/4];void build_ptable(void);void solve(int n);int main(){ int n; build_ptable(); while (~scanf("%d", &n) && n) solve(n); r... 阅读全文

posted @ 2012-05-02 15:29 getgoing 阅读(276) 评论(0) 推荐(0) 编辑

POJ 2551 Ones

摘要: 题目描述:Given any integer 0 <= n <= 10000 not divisible by 2 or 5, some multiple of n is a number which in decimal notation is a sequence of 1's. How many digits are in the smallest such a multiple of n?a multiple of n 的意思是某一个数与 n 的积(吧?)开始我愣是没读懂题,一搜都说是水题,没看别人的题解,自己想了两种方法:1. 试因子法:每次选取一个0-9的数字使 阅读全文

posted @ 2012-05-02 13:04 getgoing 阅读(407) 评论(0) 推荐(0) 编辑

2012年4月30日

UVa 825 - Walking on the Safe Side

摘要: 假期放松,做几道小题……这道题的输入比较不同:每行输入的数的个数是不确定的,所以要使用gets和sscanf();开始想偷懒,看了看Stainger大牛的输入也是这样,就没啥可说了,麻烦些就麻烦些;状态转移比较明显,递推可以解决,感觉这道题与其说是dp的,不如说是用来练习输入的;1WA,原因是最后一组输出后不要留空行(留换行);使用了 OIer 常用的写法:把程序每一部分独立起来,确实是方便了调试(在递推时 i 没有初始化,找了很久,最后一块一块注释,发现的)。# include <stdio.h># include <string.h># define N 105in 阅读全文

posted @ 2012-04-30 10:24 getgoing 阅读(490) 评论(0) 推荐(0) 编辑

2012年4月27日

POJ 1338 Ugly Numbers

摘要: Ugly Number可以表示为 [i, j, k] , i,j,k 分别表示 2 3 5 因子的个数;估计一下 i<=12 j <= 12, k<=12内有超过2000个,30^12 < 2^60,在long long 以内;关键是要按大小次序来,DISCUSS中有个大牛提了个很好的方法,我是按照他的方法来写的,0MS。# include <stdio.h># define MIN(x, y) ((x)<(y) ? (x):(y)) long long t[1505];int main(){ int i, j, k, p; t[0] = 1; i = 阅读全文

posted @ 2012-04-27 15:04 getgoing 阅读(239) 评论(0) 推荐(0) 编辑

[笔记-柔性字符串匹配]Shift-And与Shift-Or

摘要: Shift-And 和 KMP一样都是基于前缀搜索的方法,复杂度为O(n);《柔性字符串匹配》: "只有当模式串小于8时,KMP才比基于后缀和基于子串的搜索方法有效。而在这个范围内,Shift-And算法和Shift-Or算法能够在所有机器上运行,速度至少是Knuth-Morris-Pratt的两倍,并且更易于实现。"Shift-And对字母表中的每个字符构造一个位序列,根据下面的公式更新匹配状态D:D = ((D<<1) | 0^{m-1}1) & B[t_{i+1}];B[t_{i+1}]是字符t_{i+1}的位序列,当D的第j位为1并且t_{i+1 阅读全文

posted @ 2012-04-27 13:11 getgoing 阅读(741) 评论(0) 推荐(0) 编辑

2012年4月25日

要读的书

摘要: 线段树树状数组后缀数组DFA柔性字符串匹配C 与指针C 专家编程计算机程序设计艺术C++ Primer 阅读全文

posted @ 2012-04-25 20:27 getgoing 阅读(190) 评论(0) 推荐(0) 编辑

2012年4月23日

COJ 1106 幻想乡的路

摘要: 题意:若第二小生成树代价与最小生成树代价相等输出Not Unique!,否则输出最小代价;对最小生成树的每一边标记后重新计算不含这条边的最小生成树,若代价与 MST 的相等说明有多种方案,复杂度为O(N^3)。# include <stdio.h># include <string.h># define N 20005typedef struct{ int u, v, w;} Road;char f[N], use[N];int n, m, p[205];Road r[N];int cmp(const void *x, const void *y){ return (* 阅读全文

posted @ 2012-04-23 18:03 getgoing 阅读(265) 评论(2) 推荐(0) 编辑

COJ 1082 Farmer John’s Cow

摘要: 本来想水过的,结果提交了2次都是WA,就沉下心了;类似fib数列,写出几项,可以猜测递推公式为f[n] = f[n-1] + 2×f[n-2],稍加分析:正确;稍作变形有:1. f[n] + f[n-1] = 2×(f[n-1] + f[n-2])2. f[n] - 2×f[n-1] = -(f[n-1] - 2×f[n-2])所以可以求出 f[n],这里使用第一个式子得到了f[n] + f[n-1] = 2^(n-1),所以 f[n] = 2^(n-1) - f[n-1],2的幂可以使用移位,没问题吧;题目中0<n<65,所以这样做会遇到2 阅读全文

posted @ 2012-04-23 16:24 getgoing 阅读(226) 评论(2) 推荐(0) 编辑

COJ 1196 Staginner 去爬山

摘要: ……;给出可以走的位置,问最多能爬多少层,使用dp,这道题有点不同的是还可以往下走,而常见的大都是递推,需要多加一个条件,谢谢Staginner大牛的指点!dfs可能会超时(深度太大)?为什么使用C++提交而不是C?在COJ上遭遇过使用C比C++耗时超出3s的经历(时限是5s)。# include <stdio.h># include <string.h># define N 105 char map[N][N];int n, m, f[N][N]; int dp(int i, int j); int main(){ int i, j, h; while (~scanf 阅读全文

posted @ 2012-04-23 16:11 getgoing 阅读(415) 评论(2) 推荐(1) 编辑

2012年4月22日

HDOJ 1874 畅通工程续

摘要: 单源最短路径,Dijkstra,参考白书的写法;注意INF不能定义为0x7fffffff,因为后面相加可能会溢出,题目中距离最大为10000;这道题的变态之处在于有重边,遇到重边时需要更新w[i, j]和w[j, i],WA多次,15ms。# include <stdio.h># include <string.h># define INF 0x10ffffffint main(){ int k, i, j, n, m, s, t; char v[201]; int x, d[201], w[201][201]; while (~scanf("%d%d&quo 阅读全文

posted @ 2012-04-22 14:46 getgoing 阅读(245) 评论(0) 推荐(0) 编辑

HDOJ 1875 畅通工程再续

摘要: 示例的结果为1414.0,kruskal的返回类型写成了int,查了好几遍都没发现问题;还是MST,kruskal,并查集,路径压缩;# include <stdio.h># include <stdlib.h># include <math.h># define MAXN 105typedef struct{ int u, v; double d;} Bridge;int m;int p[MAXN], a[MAXN][2];Bridge b[MAXN*50];double kruskal(int n);int find(int x){ return x== 阅读全文

posted @ 2012-04-22 13:46 getgoing 阅读(473) 评论(0) 推荐(0) 编辑

HDOJ 1879 继续畅通工程

摘要: 依然是:MST, kruskal,并查集,路径压缩;在LD下的CB中老是提示segmentation fault,不知什么错误,回到win运行一闪而过而没有输出,查了半天发现查函数有一处错误,继续,仍然无输出,怀疑变量命名错误,更改,仍然无输出,最后发现文件保存的路径和输入文件的路径不一致,怎么样,流水账记得不错吧?500MS,看了排行榜上没有0MS的,明白这道题500MS不算浪费时间。# include <stdio.h># include <stdlib.h>typedef struct { int u, v; int w;}Road;int m, n, p[105 阅读全文

posted @ 2012-04-22 12:38 getgoing 阅读(295) 评论(0) 推荐(0) 编辑

HDOJ 1863 畅通工程

摘要: MST,kruskal,并查集,路径压缩;参考白书的做法:另定义一个边序号数组,排序时按照边权的大小排;1A,表示已经对WA,TLE,RE等过敏,一提交心里就发毛啊……代码有点长,重新回到 CB 不太适应。# include <stdio.h># include <stdlib.h># define MAXN 105int n, m;int w[MAXN], u[MAXN], v[MAXN], r[MAXN], p[MAXN];int kruskal(void);int cmp(const void *x, const void *y){return (w[*(int* 阅读全文

posted @ 2012-04-22 10:10 getgoing 阅读(305) 评论(0) 推荐(0) 编辑

2012年4月21日

COJ 1174 Shining Gems

摘要: 玩过这个游戏,这个题是判断当前局面是属于哪一种:有三个连在一块,换一个位置后有三个连着,其他情况;思路有两种:对每一个位置枚举周围所有可能的情况,然后判断,或者对每一个位置移动前后行和列的情况进行判断;如果使用前一种,可能遭遇大量的判断,难以保证能考虑全所有情况,代码也显得很长,后一种代码稍短,相对好写一点;924MS,怎么没卡一下?# include <stdio.h>const int d[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};int n, m, f0, f1;char f[1005][1005];int check(int i, int j) 阅读全文

posted @ 2012-04-21 09:53 getgoing 阅读(284) 评论(0) 推荐(0) 编辑

2012年4月20日

COJ 1172 Generating Queue

摘要: 经过 Staginner 大牛的悉心指点,终于AC了(虽然那个测试数据有点小小的问题);dp好题(对于像我这样的初学者来说,是一道有新意的题);# include <stdio.h># include <string.h># define MAXN 1005int n;char g[MAXN], s[MAXN], f[MAXN][MAXN];int dp(int i, int j);int main(){ int i; while (~scanf("%d", &n)) { for (i = 1; i <= n; ++i) s... 阅读全文

posted @ 2012-04-20 13:15 getgoing 阅读(244) 评论(0) 推荐(0) 编辑

2012年4月19日

COJ 1170 A Simple Problem

摘要: 题目:在一个由N个整数组成的数列中,最多能找到多少个位置连续的整数且其中的最大值与最小值之差不超过K呢?GDKOI 2003 又一道很类似的题(河床)使用的是动态规划,因为数据范围较小(复杂度为O(nk)),这里10^6*10^6肯定超时(确实TLE了);这里使用一次扫描,加上单调队列,将复杂度降为O(n)(每个元素最多只进队一次,最多只出队一次),当然不是自己的思路……详见“CSU_BMW正式组建纪念赛”解题报告以及COJ1170(A Simple Problem)这两篇,LJ大牛的代码比较清晰;WA无数次,TLE多次,RE两次,魔法值-50。。。# include <stdio.h& 阅读全文

posted @ 2012-04-19 22:39 getgoing 阅读(673) 评论(0) 推荐(0) 编辑

2012年4月17日

POJ 1007 DNA Sorting

摘要: 题意:给出 m 个长度都为 n 的字符串,按照逆序数的大小排序输出;简单的排序题,逆序数的计算,qsort练习;求逆序数有好的方法(O(n)),这里直接算也是0MS。# include <stdio.h>typedef struct { char s[51]; int w, id;}DNA;int m, n;DNA a[101];int DNA_cmp(const void *x, const void *y){ int tmp = (*(DNA*)x).w - (*(DNA*)y).w; if (tmp < 0) return -1; if ((tmp == 0... 阅读全文

posted @ 2012-04-17 11:44 getgoing 阅读(304) 评论(2) 推荐(0) 编辑

2012年4月16日

POJ 1088 滑雪

摘要: 给出一个R×C的地图,以及每个点的海拔,问下降序列最长多大?简单的DP,记忆化搜索;dp(i, j)if f[i, j]已经计算过 return f[i, j];f[i, j] = 1;for i = 1:k (ni, nj) = (i, j) + d[k]; if (ni, nj)合法 && h[i, j] > h[ni, nj] then f[i, j] = dp[ni, nj] + 1;return f[i, j];/* 滑雪:简单dp */# include <stdio.h># include <string.h># defin 阅读全文

posted @ 2012-04-16 23:29 getgoing 阅读(1165) 评论(0) 推荐(1) 编辑

上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 17 下一页

导航