随笔分类 - acm/icpc
摘要:2007年到来了。经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列(f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>=2))的值全部给背了下来。接下来,CodeStar决定要考考他,于是每问他一个数字,他就要把答案说出来,不过有的数字太长了。所以规定超过4位的只要说出前4位就可以了,可是CodeStar自己又记不住。于是他决定编写一个程序来测验zouyu说的是否正确。input: 输入若干数字n(0 <= n <= 100000000),每个数字一行。读到文件尾。output:输出f[n]的前4个数字(
阅读全文
摘要:对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。此题题意正是求这个函数 φ函数的值 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,Euler函数 x是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)。 (注意:每种质因数只一个。比如12=2*2*3 那么φ(12)=12*(1-1/2)*(1-1/3)=4) 若n是质数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质。 欧拉函数是积性函数——若m,n互质,φ(mn)
阅读全文
摘要:数学题 刚开始思路: 求n的倍数,能推出相应位根程周期性变化,比如:(56)和(29)位根都是2,n*(56) 和 n*(29)位根都是n*(2), 由于位根为1位,所以周期最大是10,但n最大只能推倒到32,观察能看出规律,整个n程周期性变化,于是果断猥琐 打表A之(中途打错,贡献2WA - -)后google看算法,竟可数学推出,ym啊以下为摘数学算法: 因为ab*ab=(10*a+b)*(10*a+b)=100*a*a+10*2*a*b+b*b=a*a+2*a*b+b*b=(a+b)*(a+b) abc*abc=(100*a+10*b+c)*(100*a+10*b+c) =10000*.
阅读全文
摘要:/*题意:输出首尾串相同的前段位置 ,例abbcaabb,符合的:abb--abb,abbcaabb--abbcaabb,所以输出3,8思路:Kmp 此题对于刚接触kmp的新手(比如说我),可以更深一点理解kmp思想 我们先看看两个例子abbcaabb,输出的是3,8 ababcababababcabab,输出2,4,9,18 其实可以看出一个规律,例一:next[8] = 3; next[3] = 0;例二:next[18] = 9; next[9] = 4; next[4] = 2; next[2] = 0; 那么是不是只要把字符串长度(l)输出,然后递归输出next[l] (l = ne
阅读全文
摘要:/* 基本题意:给一个字符串,如果在前 i 位置处满足连续循环A^K(A:单位循环段, K:循环个数),则输出i和K 这题跟pku 2406差不多 YY : kmp 保存 next[i],如果满足 i能被单位长度(i - next[i])整除,说明 (i - next[i])是单位循环段A,i /(i - next[i])也就是K。 举两个例子应该就能理解 例一: i : 12345678 字符串 : abababab next[i]: 00123456 这个例子假如当i等于8时,next[i] = 6; K也就是4,如果你有“ 你只是看 了后面[next[i]+1,i ] 这一段,不能代表全
阅读全文
摘要:/* 题意:给两个字符串a,s,判断a在s里出现的个数*/#include <stdio.h>#include <string.h>int next[10005];char a[10005];char s[1000005];int n,len_a,len_s;void Get_Next(){ a[0] = '#';//因为是a+1,如果a[0]不存在,那strlen(a) = 0 ; !!!!!!!!!!! len_a = strlen(a); len_s = strlen(s); next[1] = 0; int j = 0; for(int i=2;
阅读全文
摘要:本打算搞掉2222,此题之神如同其题号,百度得知是AC自动机,后知要运用KMP的东西,于是转向此题入门题意:给一个字符串,输出包括从1到len长 字符串前缀的总个数YY: 基本思想是 KMP + DP,主要看KMP kmp思想:对字符串进行预处理,记录与当前位置i后缀相同的“最近”位置,用next[i]记录, 保证 s[1 .. i] 中 s[i - next[i] + 1 .. i] 与 s[1 .. next[i]] 是相同的, 以便在某处字符不匹配时,不用重新从头判断一遍,只要从对应的next[i]即可, 因为中间有部分与自身重叠,减少了不必要的判断,实现见代码。 例1: i : 123
阅读全文
摘要:/* 闲来无事,本打算敲道水题,谁知纠结了很长一会儿- - 自我BS 大数加法*/#include <iostream>using namespace std;int s[100][5],c[5];int len;void Add(int a[],int b[],int d[]){ int i,yu = (a[0] + b[0])/100000000; d[0] = (a[0]+b[0...
阅读全文
摘要:/* hdu 2444 题意:判断是否是二分图,并输出最大匹配数 YY:用'临点填色法'判断,相邻点异色,发现同色则不成立 然后匈牙利算法, 求出个数除2 注:匈牙利算法时间复杂度 '邻接表': O(mn),邻接矩阵: O(n^3)*/#include <stdio.h>#include <string.h>bool map[210][210];//连接图bool vis...
阅读全文
摘要:/* 题意: 给N个比赛结果,输出拓扑排名 YY:拓扑排序,初搞,最近练邻接表,感觉比邻接矩阵快的多 两个都写了一下,竟差两倍之多,邻接表神物啊!!!*///邻接表 Accepted 1285 15MS 248K 1030 B C++ kfinder#include <iostream>using namespace std;int ind[505]; // indeg...
阅读全文
摘要:/*题意:给个二维数组,'.'可以走,'X'不可走,'1-9'代表在此消耗的时间输出记录从(0,0)到(n-1,m-1)的耗时最小值YY: :从(n-1,m-1)到(0,0)逆向BFS,记录上一点,直接输出最优序列*/#include <iostream>#include <queue>using namespace std;const int MAX = 99999999;int n,m;struct zu{ char c; int num,x,y,qianx,qiany;}map[110][110];int dir[4
阅读全文
摘要:/* 题意:给出一个图,求源点到其他各个点之和 加上 其他各个点到源点之和的最小值 思路:SPFA, 建两个表,顺序不说, 逆序的情况:在初始化的时候在反向保存另一相同表 即: 1 ---> 2 13 反向后:2 ---> 1 13 要求各点到源点的距离和,即求源点到各点的距离和 所以,处理好后,只要求两次源点到各点距离和相加即可 精髓:静...
阅读全文
摘要:等一等,吃蛋糕之前先考大家一个问题:如果校长大人在蛋糕上切了N刀(校长刀法极好,每一刀都是一个绝对的平面),最多可以把这个球形蛋糕切成几块呢?做不出这个题目,没有蛋糕吃的!为-了-母-校-,为-了-蛋-糕-(不是为了DGMM,枫之羽最会浮想联翩...),加-油-!Input输入数据包含多个测试实例,每个实例占一行,每行包含一个整数n(1=n=1000),表示切的刀数。Output对于每组输入数据,请输出对应的蛋糕块数,每个测试实例输出一行。Sample Input123 Sample Output248转:http://blog.csdn.net/liyanguestc/archive/2
阅读全文
摘要:/* 题意:判断字符串之间是否存在完全覆盖 搞了一下午,一直MLE,动态的表需要释放 内存空间,弄成静态的就不用了*/#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;struct node { struct ...
阅读全文
摘要:/* 问题:输入一段英文,对照给的单词的映射,输出映射后的字符串 YY :典型的字典树问题,先处理好映射表,在一映射单词结尾处记录与之对应的单词, 后面字符串处理一下,单个单词进行查,找到后输出,没有输出原始词 刚开始交RE越界,不解,觉得是指针问题,但找不出错处 后来找到个神奇数据后改过就A了 /* START dog aa END START a aa END */*/#...
阅读全文
摘要:/* 问题如题目 典型的字典树,可以当模板 指针的运用; 申请空间;*/#include <stdio.h>#include <string.h>#include <stdlib.h>struct node{ struct node *child[26];//指针,先申请一个地址,后面用到再申请空间 int num;};struct node *root;v...
阅读全文
摘要:/* 这个代码对我自己来说,写的算是比较工整了(大牛勿BS); 里面的函数可以当模板用*/#include <stdio.h>#include <string.h>char dpM[1100][1100],dpF[1100][1100]; void in_add(char s[], char max[],char min[]){ int l1=strlen(max); in...
阅读全文
摘要:/* 基础多重背包题 比较有价值的就 “ 二分制压缩 ” 了,将每个个数长度num压缩成log(num)*/#include <cstdio>#include <cstring>struct One{ int v; int c;};One peo[100001];int hash[15][15];int dp[100005];int max( in...
阅读全文
摘要:http://acm.hdu.edu.cn/forum/read.php?tid=15908&page=eahttp://hi.baidu.com/matrush/blog/item/749bf38d058ca7f1503d9263.html/cmtid/2213e5d4e366e92107088ba7
阅读全文

浙公网安备 33010602011771号