
ACM/ICPC
文章平均质量分 59
cclsoft
这个作者很懒,什么都没留下…
展开
-
树的学习笔记。
一、在二叉树的第 i 层上至多有 2i-1 个结点(i≥1)。二、深度为k的二叉树中至多含有 2k-1 个结点,(k≥1)。三、对任何一棵二叉树 T,如果其终端结点数为,度为2的结点数为,则 = + 1四、具有n个结点的完全二叉树的深度为 log2n+1。五、如果对一棵有 n 个结点的完全二叉树(其深度为 log2n+1)的结点按层序(从第1层到第 log2n+1 层,每层从原创 2009-07-18 23:54:00 · 573 阅读 · 0 评论 -
FOJ 1706 括号表达式
又是很挫的代码,很水的题目。。。看来我只能做水题了。。。。具体思想是用栈来实现。 注意最后如果括号不匹配,必定是)(的形式。知道下面该怎么做了吧。。。 #include int main(){ char str[10001]; char stack[10001]; int p1,p2,p3,p4; char pp3[10001]; cha原创 2009-07-20 09:47:00 · 618 阅读 · 0 评论 -
FOJ 1551 猪猪玩牌
其实只要统计被借牌后不足平均数的牌堆就可以了。这里是重头开始借牌的。还是水题。。水题都水不过别人。。。 #include int main(){ int arr[101]; int n; int sum,i,avg,r; int count; while (scanf("%d", &n)!=EOF) { sum = 0; coun原创 2009-07-20 11:58:00 · 653 阅读 · 0 评论 -
FOJ 1004 Number Triangle
思路就是从上加到下。求最后一排数的最大值。 貌似还可以用DP来做。。。不过那东西还不会。。。继续学习。。 #include #include int main(){ int sjx[1001][1001]; int i,j,n,pos; int max; int a,b; while (scanf("%d", &n)!=EOF) { m原创 2009-07-20 18:04:00 · 905 阅读 · 0 评论 -
排列组合非递归算法的实现
#include #include //从n个元素的数组a中,取m个元素的组合bool zuhe(int a[],int n,int m) { //p[x]=y 取到的第x个元素,是a中的第y个元素 int index,i,*p; p=(int*)malloc(sizeof(int)*m); if(p==NULL) re原创 2009-07-16 20:05:00 · 5498 阅读 · 5 评论 -
FOJ 1011使用非KMP算法AC!!
后来发现。。此法只能用于本类型的题目.对于其他的模式匹配的题目无法正确找出。 网络上面都说用KMP算法。。。我承认我非主流了。。。 之前因为没有递归一下从而导致faaaffaaaf错误。 提供一组测试数据asasasasadadaaaaafaaaffaaafa.结果41421 #include #include int原创 2009-07-17 21:05:00 · 816 阅读 · 0 评论 -
FOJ 1350 Very Simple Problem
本题的思想是1.输入完毕一组专家的数据后。将他们排序,就知道最大和最小值。2.把最大值在标记数组中把该题目标记为-1,最小值把该题目(不为-1)的++循环以上步骤直到所有专家数据读入完毕。3.处理标记数组,判断各个题目的标记值,若大于等于专家数目除以2,则输出。另外需要注意格式问题,此题容易出现格式错误。 代码如下。#include #include #in原创 2009-07-18 11:15:00 · 723 阅读 · 0 评论 -
FOJ 1207 半数集问题
思想为递归的思想。注意半数集不是多重集。集合中已经有的元素不再添加到集合中。 必须注意重复问题!由于0故可能产生重复的是一个2位数例如30->1230和30->230->1230相同。或者60-(添加24)>2460-(添加1)>12460和60-(添加4)>460-(添加2)>2460-(添加1)>12460在一位数y=x%10的半数集中已经产生。这样就必须剔原创 2009-07-20 19:40:00 · 1225 阅读 · 0 评论 -
阶乘位数的计算
例如1000阶乘位数:log10(1)+log10(2)+···+long10(1000)取整后加1或者log(N!)=lnN!/ln10=(NlnN-N)/ln10=2565.7soN!=10^2565.7=10^.7*10^2565=5.01e2565原创 2009-07-17 18:38:00 · 940 阅读 · 0 评论 -
FOJ 1019 猫捉老鼠
郁闷的半死!一个输入问题,导致了一直的WA!!!原来输入是用if(scanf("%c", c), c==/n) scanf("%c", c);这样在处理多组数据的时候会出现问题。后来改为while(scanf("%c", &c), c == /n) ;抱着试试看的态度submit....妈的! AC了。。。。看来以后要注意了。原创 2009-07-18 17:31:00 · 777 阅读 · 0 评论 -
FOJ 1550 猪的分数
本题的主要思想是求最大公约数,如果为一,则求出分数的值后sort.由于自己不懂怎么求最大公约数>_导致了无数次Wrong Answer.搞得我都有贴代码的冲动了。。。下面是代码。#include #include #include using namespace std;struct num { char chu[10]; double result原创 2009-07-18 21:41:00 · 631 阅读 · 0 评论 -
FOJ 1024 Simple Computer
搞了一个早上,代码有点搓。。。。由于判断while退出的条件是HLT,而我却画蛇添足加了个PC>32的条件。导致了几次的Wrong Answer 其实题目很简单,就是实现一些简单的运算罢了,主要还是对题目的理解。 下面是指令的翻译 000xxxxx STA x 把运算器的值存入内存x store the value of the accu into memo原创 2009-07-19 11:14:00 · 808 阅读 · 0 评论 -
FOJ 1557 Tennis Score Board
不多说了,又是一水题。下午Time那题过不了,真是郁闷。。那么搓的代码能过才怪。。。。 这题主要是程序流程要写清楚了。。其他没什么需要注意的。#include #include int main(int argc, char* argv[]){ int n,m,i,j; int flag_a,flag_b,status; int score_a,原创 2009-07-19 19:58:00 · 620 阅读 · 0 评论 -
FOJ 的一个跨站~~orz~~~
http://acm.fzu.edu.cn/user.php?name=xiaoc 不过Recent Ranklist这个页面不存在问题。原创 2009-07-20 12:02:00 · 501 阅读 · 0 评论 -
FOJ 1558 Software Bugs
主要思想还是使用栈来实现。因为有""的特殊情况,所以要设置一个falg来注明。代码如下。#include #include #include using namespace std;int main(){ char str[120]; char stack[120]; int len,i,fenhao,j; bool flag; while (c原创 2009-07-18 09:53:00 · 587 阅读 · 0 评论 -
FOJ 1481 环串
这题原来想的太复杂了。。。。其实用暴力很容易解决。。原来想用kmp比较。。可是比较来比较去,判断的条件就是不符合。。。搞的郁闷一个早上。。。 以后象字符串环的基本都可以用扩展的方法来做了。 #include #include int main(){ char str0[201]; char str0_ex[603]; char str1[20原创 2009-07-21 20:30:00 · 712 阅读 · 0 评论 -
FOJ 1402 猪的安家
这道题目的基本思想就是必须求前n-1个数的最大公约数。 比如这边为了方便大家理解,给出一组测试数据。 33 15 17 210 1 这组数据的最终结果是121下面我们就来分析一下。 定义一个函数gongbeishu()求前n-1项的最小公倍数。首先,我们定义变量 gbs 表示前n-1个数的最小公倍数。定义sum来表示程序运行中猪的头数。初始化su原创 2009-07-21 20:51:00 · 1097 阅读 · 0 评论 -
FOJ 1067 Running Length Code
很简单的一个问题,但是由于最开始题目看不懂。。。。弄了好久。。就是要让你统计连续0 1的个数,然后和它的值(比如0,值就为0,1,值就为1)组成一个byte也就是比如0 0 0 0 0 0 0那么存在有7个0,组成的byte值就是00000111又比如1 1组成的byte值就是10000010化成10进制就是所得的数。还要注意Suppose that the lengt原创 2009-07-23 08:32:00 · 846 阅读 · 0 评论 -
FOJ 1076 穿越沙漠
逆向思考。但是最后路程会多出来,必须减去多出来的那部分。 #include int main(){ int n,k; double dist; double orl; int i,j; while (scanf("%d", &k) != EOF) { for (j=0;j<k;j++) { scanf("%d", &n);原创 2009-07-21 11:56:00 · 753 阅读 · 0 评论 -
FOJ 1476 矩形的个数
数学题,要注意精度问题!OJ支持到long long#include int main(){ long n,m; long i,j; long long sum; while (scanf("%ld%ld",&m,&n)!=EOF) { sum = 0; for (i=1;i<=m;i++) for (j=1;j<=n;j++)原创 2009-07-21 16:16:00 · 727 阅读 · 0 评论 -
FOJ 1157 Crazy Tea Party
等差数列求和的公式忘记了。、、、、无语吧。。。算了,小数让计算机来算。。回家复习一下。。。 思路:假设123456 若不构成环,就需要变成654321则根据冒泡法排序可以计算出次数为(n*(n-1)+1)/2也就是5+4+3+2+1如果构成环,则最终应该变为321654这样所需的次数最少那么冒泡排序的次数就是((n/2*(n/2-1)+1)/2)*2原创 2009-07-22 21:49:00 · 600 阅读 · 0 评论 -
FOJ 1068 An Interesting Set
还是题意的理解。最开始以为set集里面最大的值是500;一直错。。后来才发现是set里面的元素个数最多为500....差了很多。。。。 方法是用打表的方法。由于1-9必符合条件。所以先添加到表中,由于10=5*2也是,也添加到表中。11肯定不是了,那么就从12开始。先判断i是否是表中已经有的元素*2,如果是,直接加入表中。如果不是,再进行判断,是否各位数原创 2009-07-23 11:15:00 · 899 阅读 · 0 评论 -
栈的应用之表达式运算。
因此,从原表达式求得后缀式的规则为:<a onclick="function onclick(){MM_openBrWindow(../../../flash/chap03/3-3-7.swf,数据结构,width=400,height=390)}" href="javascript:;"> 1) 设立运算符栈; 2) 设表达式的结束符为"#",预设运算符栈的栈底为"原创 2009-07-24 00:44:00 · 641 阅读 · 0 评论 -
FOJ 1002 HangOver
纯粹的精度题。用了点偷鸡的方法,嘿嘿。。 #include int main(){ double i,j; double length; float inp; double arr[299]; int k; for (j=2.0;j<301.0;j++) { length = 0; for (i=j;i>1.0;i=i-1.0)原创 2009-07-21 11:51:00 · 661 阅读 · 0 评论 -
FOJ 1411 最长配对子串
还是使用栈,如果存在不匹配的括号,那么这些括号最后都会剩余在栈中。只要在压入栈的同时,带入这个符号在字符串的位置。这样我们最后就可以根据栈中剩余的符号,来分割原来的字符串,并且也很容易取到最长的匹配。 本程序一次性AC,真的是没有想到。。。写代码前理清思路,规范代码真的很重要。。很搓的代码一般是不容易通过的。。要是通过了,说明你人品不错。连续通过3题。你就可以考虑去买彩原创 2009-07-22 00:02:00 · 1480 阅读 · 2 评论 -
FOJ 1589 自动机
这题主要考的是队列的应用。。。嘿嘿,我偷懒了,用了STL的deque为什么不用queue呢??因为经过查找发现queue没有清空队列的成员函数。。不符合题目的要求。。。 代码就简单了。。 #include #include using namespace std;int main(){ int m,n; char command[10];原创 2009-07-24 01:46:00 · 650 阅读 · 0 评论 -
FOJ 1685 跑跑卡丁车
水都不能一次过,非常非常的郁闷。。。回来重写一遍代码就过了。。。什么人品这是。。。。排序,相除。 #include #include using namespace std;bool v_sort(int a,int b){ return a>b;}int main(){ int m,n; int speed[1002]; int t原创 2009-07-22 12:50:00 · 775 阅读 · 0 评论 -
FOJ 1082 最大黑区域
这题做的都要哭出来了。。。。。早上跑跑卡丁车的题目做了几遍都没过。。。。没有比那个题目再简单的了。回去重新写遍代码就AC....后来看论坛上面大牛指点,原来是数组开的不够大。。。郁闷,竟然没有Runtime ERROR.... 这题原来用一种很挫的方法做。。。后来发现考虑不够全面。。。。想到连续的1区域其实可以看做联通图。然后用图的深度优先遍历就可以解决问题原创 2009-07-22 16:03:00 · 1301 阅读 · 0 评论 -
FOJ 1042 Ackermann Function
最后自己得出的结论,双递归的深度不能超过3.否则层数将会以难以想象的速度趋向正无穷大!! 这题Ackerman函数是经典的一个双递归函数。这题其实主要目的就是要让我们了解双递归函数的执行过程。但是我们的代码当中并没有用到递归函数,这是为什么呢??因为根据推倒可以得出,当m=1的时候可以推导出2+n当m=2的时候可以推导出3+n*2当m=3的时候可以推导出sum原创 2009-07-23 19:20:00 · 921 阅读 · 0 评论 -
求A^B mod C的主要公式
A*B mod C=((A mod C)*(B mod C) mod C A^B mod C=(A mod C)^(B mod C) mod C原创 2009-07-27 10:57:00 · 1050 阅读 · 0 评论 -
【收藏】A^B mod C代码
#includeunsigned long long mul(unsigned long long a,unsigned long long b,unsigned long long c){ unsigned long long ret=0,tmp=a%c; while(b) { if(b&0x1) if((ret+=tmp)>=c) ret-原创 2009-07-27 21:25:00 · 1023 阅读 · 0 评论 -
A^B mod C的分治思想
A^B mod C假设01.使用最原始的方法是把A^B先求出来,最后mod C求出值。但是这种方法效率低,时间复杂度为O(b)而且a^b必须小于n才不会溢出。具有很大的局限性。 2.改进方法一:假设A>C,那么存在A^B mod C = (A mod C)^(B mod C)这种情况用在A>C的情况下非常适用,但是当A所以最坏的情况下,还是需要a^b必须小于n才不会原创 2009-07-28 09:10:00 · 2123 阅读 · 0 评论 -
FJNU OJ 2072粉刷迷宫。
这一题是一道搜索题。和以前做过的最大黑区域有着很大的相似之处。都是利用递归进行搜索。但是最大的不同就是,粉刷迷宫由于要先求出可以和外界相通的迷宫。所以必须从最外围进行搜索,然后标记出可以和外界相通的路。最后对内部需要粉刷的墙壁和外部需要粉刷的墙壁进行统计。最后得出的结果就是总共需要粉刷的墙壁了。 其实这题还可以用栈来做。算法思想见严蔚敏的数据结构的栈那一章。最后提到原创 2009-07-26 09:15:00 · 1073 阅读 · 0 评论 -
KMP之完全版
#include #include void getnext(char str[],int next[]){ next[0] = -1; int i=0; int j=-1; while (i<strlen(str)) { if (j==-1||str[i]==str[j]) { i++; j++; next[i] = j;原创 2009-07-27 09:51:00 · 704 阅读 · 0 评论 -
递归经典简单问题之猴子吃桃
猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。 我们可以很容易的得出递推公式f(n-1) = (f(n)+1)*2只要在n=1的时候return就ok啦 #include int taozi(in原创 2009-07-27 10:08:00 · 1100 阅读 · 0 评论 -
模运算的技巧
模运算规则, 模运算与基本四则运算有些相似,但是除法例外。其规则如下 (a + b) % n = (a % n + b % n) % n (1) (a - b) % n = (a % n - b % n) % n (2) (a * b) % n = (a % n * b % n) % n (3) ab原创 2009-07-27 11:22:00 · 1023 阅读 · 0 评论 -
FZU数据结构精品课程 2.1 选举问题
实验题2.1 选举问题问题描述:某城市正在进行一场市长选举,选民将要选的人的名字,写在很选票上,最后统计选票,确定最后的市长人选(初步选举)。实验任务:给定一组选票,求出市长的人选,及所得的选票数。数据输入:由文件input.txt给出输入数据。每行给出一组字符串(不含空格),表示所选择的人选的名字。字符串长度不超过30个字符。(最多有10000组字符串)。结果原创 2009-07-26 11:10:00 · 674 阅读 · 0 评论 -
KMP之获取next表。
代码如下,自己看书去理解吧,哈哈! void getnext(char str[],int next[]){ next[0] = -1; int i=0,j=-1; while (i<strlen(str)) { if (j==-1||str[i]==str[j]) { i++; j++; next[i] = j; } else原创 2009-07-27 08:56:00 · 651 阅读 · 0 评论 -
x86 C中各种整型表示的范围
long 型数据表示范围表示数值区间:【-2147483648,2147483647】注:在x86机子上面int和long表示的范围相同。 long long 型表示范围【-9223372036854775808,9223372036854775807】原创 2009-07-27 11:00:00 · 805 阅读 · 0 评论 -
费马小定理
费马小定理Ap-1 mod p = 1p为素数。原创 2009-07-28 15:40:00 · 691 阅读 · 0 评论