- 博客(44)
- 资源 (2)
- 收藏
- 关注
原创 du熊学斐波那契I
du熊学斐波那契ITime Limit : 2000/1000ms (C/Other) Memory Limit : 65535/32768K (C/Other)本次组委会推荐使用C、C++Problem Descriptiondu熊对数学一直都非常感兴趣。最近在学习斐波那契数列的它,向你展示了一个数字串,它称之为“斐波那契”串: 1123581
2012-12-12 00:04:20 908 2
原创 ZOJ 3426 & HDU 3719 Snooker Referee
有关斯诺克的模拟题。1、不犯规的情况下,打进几颗红球加几分2、犯规的情况下,打进的红球不摆回球桌上,不加分3、犯规的情况下,打进的彩球都要摆回球桌上,不加分4、犯规的情况下,对手加的分数是这轮击球者所要击打的球的分数与打进的球的分数以及4取最大的值。5、一些细节问题,自己需要注意。#include #include struct Snooker{ char name
2012-08-14 00:08:02 856
原创 ZOJ 3472 Play Bridge
模拟题。几个需要注意的地方:1、第一轮出牌的是叫牌的下家2、每轮赢的人下轮第一个出牌3、每轮和判断谁赢,如果有主牌的话,主牌大的赢,否则就是和先出的那张牌同花色之间比较大的赢(其他不同花色的牌为垫牌,垫牌输)。#include #include #include using namespace std;struct node{ int card[14]; bool
2012-08-08 10:45:55 567
转载 快速判断一个数能否被1、2、3、4、5、6、7、8、9、10、11、12、13、17、19、23等整除的规律总结
(1) 1与0的特性: 1是任何整数的约数,即对于任何整数a,总有1|a. 0是任何非零整数的倍数,a≠0,a为整数,则a|0. (2) 若一个整数的末位是0、2、4、6或8,则这个数能被2整除。 (3) 若一个整数的数字和能被3整除,则这个整数能被3整除。 (4) 若一个整数的末尾两位数能被4整除,则这个数能被4整除。 (5) 若一个整数的末位是0或5,则这个数能
2012-08-03 08:34:54 4415 1
原创 FOJ 2071 lucky number
定义了lucky number.就是一个数的任意从左到右选三个数字a,b,c。若ab>c或者a,b,c三者中存在相同数字,则不是lucky number。可以证明大于9999的数中不存在lucky number.然后就是暴力判断1~9999的每个数是不是lucky number.(写的比较挫。)数组cnt[]存放,1~N的lucky number的总个数.#include
2011-12-12 00:52:38 634
原创 FOJ 1400 平方数
http://acm.fzu.edu.cn/problem.php?pid=1400这题可以暴力(R - L)的长度,因为 1、1其次,本题要用到异或运算,用1和0表示某个因子出现个数是基数次还是偶数次。一开始用MAP超时,后来改用字典树过了。(没暴力的快,因为(R-L)的值不会太小)。#include using namespace std;struct node{
2011-12-10 18:03:04 475
原创 FOJ 1879 Air Strike
题目大意:有很多座建筑([ 1 , 10^8 ]),摧毁n座(可重复),m次查询,查询现在第i座的原先编号。 思路:考虑到1对其进行二分查找。复杂度o(nlogn)。 #include #include using namespace std;#define MAXN 50010int x[MAXN];struct node{ int l
2011-11-18 00:22:53 426
原创 FOJ 1893 内存管理
ono。纠结一下午。大一的校赛题,大三才解决,而且算是做了操作系统的作业。嘿嘿,偷懒下。过段时间,贴上代码。最佳适配算法,要选择足够大的而且最左边的。。。#include struct node{ bool state; short id; short pre,next;}m[110];void Initial(){ int i; for(i=0;i<
2011-10-31 17:43:13 403
原创 FOJ 1688 Binary land
求最短通关的按键次数。马上可以想到是广搜。。。 简单题。注意的地方是,两者水平上移动方向相反。#include #include #include using namespace std;int dir[4][2] = { -1, 0, 0, 1, 1, 0
2011-10-10 08:56:26 1018
原创 1656 How many different numbers
呜呜,这题做了好久啊。4个月吧。纠结。以前,自己写的代码和百度来的代码都超时。纠结。今天,看了下一道类似题的解题报告,就自己动手写了遍。1A,~\(≧▽≦)/~具体思路:先把N个保存下来,进行离散,然后用就可以用flag记录某个数前面出现的位置,再把询问保存下来,按右
2011-10-02 21:39:58 516
原创 FOJ 1508 Link-up Game (二分图匹配)
和1467 Pick Up Points一模一样。求最大匹配即可。稍微小改下代码就ac了。好的思想是:match数组记录的是匹配的方向。bool find(int fx,int fy){ int x,y,i; for(i=0;i<4;
2011-10-01 10:10:42 389
转载 [网络流]最大权闭合图
以下内容参考 胡伯涛 《最小割模型在信息学竞赛中的应用》,感谢他为我们提供这么优秀的论文。看不懂以上论文的同学,可以试试看一下以下内容,本文无大量的数学符号,方便阅读理解。首先我们由一道题来引入,见 [线性规划与网络流24题 2] 太空飞行计划问题 。这道题中
2011-09-05 10:02:08 493
转载 SPFA算法 学习。
SPFA算法:求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm,是Bellman-Ford算法0(VE)的一个优化,期望的时间复杂度O(2E),E为图的边数,所以SPFA用在稀疏图上的效果会更加明显。SPFA对Bellman-For
2011-08-14 10:14:00 754
原创 FZU 1712 最大树高
这题做了好久,一开始的时候按照网上别人的思路写,结果超时。因此,纠结了好久。今天,发现他居然遍历了4次,时间复杂度是4 * O(n)。 囧。这题,可以广搜搞定,不过写了那么多超时的深搜,我还是用深搜。#include using namespac
2011-08-13 15:34:11 618
原创 POJ 1101 The Game (广搜)
广搜。和以前的一题一样,如果到某个点,判断这点是否走过,或者当前走法走到这点所拐方向的次数少于先前走法。那么更新这点所需的拐方向数。并将这点推入队列。#include using namespace std;#define MAXN 110int sx,sy,ex,ey,fi,la,n,m;char map[MAXN][MAXN],ch[MAXN];int cn
2011-08-08 09:57:36 506
原创 HDU 3911 Black And White
有原题的题。自己写的时候,一直超时。悲催啊。然后,上网看了下别人的解题报告,发现需要一个标记,用来表示是否需要翻转。这样,就不用每次都更新到连续的区间。(避免复杂度变高)果断,给力啊。#include using namespac
2011-08-07 12:55:29 582
原创 uva143 - Orchard Trees
在一个变长为100的矩形果园中均匀载着果树,果树坐标为(i,j), 1先算出边界,然后暴力枚举。#include #include #include using namespace std;#define min(a,b) ((a)<(b)?(a):(b))#defi
2011-07-20 11:59:33 743
原创 FOJ 1750 Hospital Location
注意到n果断,暴力搜索即可。以每个点为根,深搜建树,同时计算出路程。 又水了一题,/(^o^)/代码看起来好挫啊。=。=#include using namespace std;int n,cnt;struct node{ int p; int fi; int link[3];}tree[110];bool flag[110];void DFS(int c,int num){ int i; cnt+=c*tree[num].p; for(i
2011-05-26 09:12:00 615
原创 FZU 2030 括号问题
<br />福州大学第八届程序设计竞赛<br />校赛的时候是用深搜做的,当时也没想到能做出来,还兴奋了下。(~ o ~)~zZ<br /> <br />今晚,灵子教我可以用DP解决。 好奇,就偷看了下他代码。<br /> <br />#include <iostream>using namespace std;int f[20][20],i,j,len;char ch[20];int main(){ while(scanf("%s",&ch)!=EOF) { me
2011-05-02 23:01:00 1112 7
原创 POJ 1088 滑雪
<br />传说中很经典的一题。<br /> <br />关键就是记录下已经搜索过的点。可以节省很多的时间。<br /> <br />学习了。<br /> <br />好久没做题了。。。<br /> <br />#include <iostream>using namespace std;int map[105][105];int step[105][105];int dir[4][2] = {-1,0,1,0,0,-1,0,1};int r,c;int DFS(int x,int
2011-03-26 22:33:00 417
原创 FOJ 1968 Twinkling lights III
<br />线段树,嗯,嗯。<br /> <br />本题有5个操作,并且对象都是区间:1. 开灯 2.关灯 3.把开的关,关的打开 4.询问区间有几盏灯亮着 5.询问区间最多连续亮着几盏灯<br /> <br />结构体里的cov是否完全覆盖,-1表示未完全覆盖,0表示区间的灯都暗着,1表示区间灯都亮着。<br /> <br />#include <iostream>using namespace std;#define MAX 2000000#define LL(x) (x<<1)#de
2011-02-15 21:37:00 480
原创 Foj 1771 Counting in English
<br />水题。嗯。贴上我写的最挫代码。<br /> <br />#include <stdio.h>#include <string.h>const int one = 1;const int two = 2;const int three = 3;const int four = 4;const int five = 5;const int six = 6;const int seven = 7;const int eight = 8;const int nin
2011-02-13 15:23:00 440
原创 HDU 1251 统计难题 字典树
<br />以前也看过字典树。当初貌似懂了,结果忘了,所以又打算重新学学。<br /> <br />网上找了些代码,大都是用指针实现的,本人看到指针就头大。<br /> <br />郁闷啊。<br /> <br />所以,自己写了个没用指针实现的。<br /> <br />#include <iostream>using namespace std;struct node{ int cnt;//前缀出现次数 int acnt;//单词出现次数 bool ans;//是否
2011-02-03 14:53:00 385
原创 字典树。。
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。
2011-02-03 14:01:00 304
原创 HDU 3736 CD
<br />汗,一开始把mililion认为是1亿。结果连数组都不敢开。<br /> <br />水题。算是队列的应用吧。<br /> <br />#include <iostream>using namespace std;int a[1000010];int b[1000010];int main(){ int n,m,fa,fb,i,cnt; while(scanf("%d%d",&n,&m)&&(n||m)) { for(i=0;i
2011-02-01 20:11:00 929
原创 PKU 2528 Mayor's posters
<br />本题poster的宽度很大,而poster的数量很小。<br /> <br />所以,离散化,保证不会TLE。<br /> <br />离散完之后最多有20000个点。所以树的结构数组要开80000。<br /> <br />一开始,由于只会建区间树,导致很多细节处理的不清楚,百度了别人代码,发现不太容易懂。<br /> <br />最后,学了下怎么建立点树。然后,果断A了。<br /> <br />//呜呜,不会点树的悲剧,做了3个小时,还好思路都对,算是一种安慰吧。。//表示,有代码中的
2011-02-01 15:27:00 425
原创 PKU 2777 Count Color
<br />题目大意就是不断更新区间[i,j]的颜色,不断询问区间[i,j]有几种颜色。<br /> <br />在insert函数中一个地方写错了,导致WA了好几次。<br /> <br />还有就是,写着写着忘记判断A是否大于B了。无奈。ORZ。。ORZ。。<br /> <br />#include <iostream>#define MAX 100000using namespace std;struct node{ int l,r,mid,cov;//cov=-1,表示未被覆盖}
2011-01-31 19:49:00 401
原创 FOJ 1962 新击鼓传花游戏
嗯,线段树的操作。点的增加,删除,和查询。有意思的是,增加和查询的是第K小项。O(∩_∩)O~ 写了好久,貌似发呆了一大半时间。剩下的一大半时间,跑去踢球了。ORZ。ORZ。。我爱走神,偶也。贴个,我是如何找到第k小元素的函数。int query(int num,int k){ if(k==tree[num].r-tree[num].l) return tree[num].l+k-1; if(k
2011-01-31 15:35:00 678
原创 FOJ 1608 Huge Mission
线段树,做了两个多小时。我错了。受到hdu1698 Just a Hook的启发,就开始试着解决这题。建议先做完hdu1698,再做这题。题目大意就是说,给你M个子区间,和这个区间的效率。问你总区间的最大效率是多少。#include #define MAX 50000using namespace std;struct node{ int l,r,mid,val; bool cov;}tree[MAX*4];void build(int l,int r,int num){
2011-01-30 22:59:00 634
原创 HDU 1166 敌兵布阵
我是用线段树解决的,也可以用树状数组解决。以前看别人的代码写过一个有离散化的线段树,现在印象模糊了,就在拾起来线段树。build()建树函数insert()修改cnt的函数,递归时的每一段都包含该段,所以他们的cnt都一起改变。query()查询函数,一开始直接返回的是区间[i,i+1]的值。完全没抛弃了线段树的精髓。ORZ。。#include #define MAX 50000using namespace std;struct node{ int l,r,mid,cnt;}tree[
2011-01-29 20:10:00 366
原创 FOJ 1073 Raiders of the Lost Ark
搜索题,广搜。滴答答。写的蛮顺畅的,挺满意的。‘S’是出发的地方。‘X’是结束的地方。‘W’不能走。‘B’可以走。dir数组存移动方式。非常裸的BFS。。。。以下是代码。#include using namespace std;int fi,la,sx,sy,ex,ey,n,m;int dir[8][2]={-1,0,1,0,0,-1,0,1,-2,-2,-2,2,2,-2,2,2};char map[20][20];struct queue{ int x; int y; i
2011-01-28 19:42:00 539
原创 FOJ 1046 Tempter of the Bone
<br />搜索题。深搜,还了解到回溯。<br /> <br />里面有两个剪枝,呼呼。曼哈顿距离剪枝,和奇偶性剪枝。<br /> <br />奇偶剪枝可以看看这篇博文:http://blog.csdn.net/lovelyloulou/archive/2009/06/07/4248584.aspx<br /> <br />#include <iostream>using namespace std;int n,m,t,flag,sx,sy,ex,ey;int dir[4][2]={0,-1,0
2011-01-28 00:29:00 435
原创 FOJ 1542 Speed Reading
嗯,我这应该算是递归吧。呼呼。不容易啊。能写出来还是蛮高兴的。题目的意思就是算出看这本书所花费的时间。分为一口气能看完,和不能看完两种。两种里面还有恰好看完和不是恰好看完之分。#include using namespace std;int s,t,r;int time(int n){ if(s*t>=n) { if(n%s==0) return n/s; else return n/s+1; } else { if(n%(s*t)==0
2011-01-27 22:17:00 383
原创 FOJ 1467 Pick Up Points
参考了别人的代码。给力啊。#include using namespace std;bool map[110][110];bool used[110][110];int match[110][110];int dir[4][2]={-1,0,1,0,0,-1,0,1};//方向,学习了。bool find(int fx,int fy){ int x,y,i; for(i=0;i
2011-01-23 00:07:00 478
原创 FOJ 1684 迷宫救美
广搜。嗯,嗯。关键点:把内力大于原先内力的数据入队。不然会推入很多没用的数据,导致队列要开的很大。因此,RE了好几次,爆内存了好几次。无奈。 做题前应该考虑清楚。还有就是,步数cnt,应该同时进入队列。还有就是,建图的时候需要注意,啊,啊,啊。我把边界置为‘*’。因为建图今天WA了好几次。郁闷。代码:#include using namespace std;struct que{ int x; int y; int cnt;}coo[500];char map[25][25];
2011-01-12 14:27:00 746 2
原创 FOJ 1845 Look Up
题目大意:给你一组数据,要你求出第i个数的右边第一个比他大的数的下标,若此数不存在下标为0。从右往左来,用数组来模拟实现一个堆栈。样例:给6个数 326112。先把第i个数和栈顶元素比较,如果大于等于栈顶元素的话,将栈顶元素出栈。一直循环,直到第i个数小于栈顶元素,第i个数的右边第一个比他大的数的下标就栈顶元素的下标,接着把栈顶元素和下标入栈。开了个high数组,high[0]=1000010;这样便于算法实现。代码如下:#include using namespace st
2011-01-12 01:11:00 501
原创 Foj 1715 Ball and Box
题目大意:给你N个不同的球和R个不同的盒子,要你放球,且盒子不能为空。问有几种放法。先考虑球的选择方法,是第二类stirling数,然后盒子排序R!。两者相乘即为答案。离散数学里有这内容,讲的很清楚,网上应该也有。附上代码。#include using namespace std;//放球模型,第二类stirling数,球有区别,盒有区别,无空盒,离散P282int stirling[11][11];int main(){ int n,r,i,j,cnt; stirling[1]
2011-01-12 00:40:00 489
原创 FOJ 1018 Maximal Sum
本题的中文描述:给定一个由N*N*N 个整数组成的立方体,定义其和为N*N*N个数的和。现在,给你一个N*N*N 个整数组成的立方体,请你从中找出一个和最大的子长方体(可与给定的立方体相同)。 例如,对于立方体: 0 -1 3 -5 7 4 -8 9 1 -1 -3 -1 2 -1 5 0 -1 3 3 1 -1 1 3 2 1 -2 1 其和最大的子长方体为: 7 4 9 1 -1 5 -1 3 3 2 -2 1 它的和为31。本题是三维的情况,二维情况为求最大子矩阵问题,一维的情况为最大子段和问题。。。
2011-01-08 13:59:00 705
原创 FOJ 1518 Checkers
题目大意:就是给你两种颜色的跳珠,置于一个直线上,中间隔着一个空。求出交换两种颜色珠子需要多少步。自己动手试试的话可以发现n为3时需要3步,n为5时是8步,n为7时是15步(我模拟的时候是16步,ORZ)。可以得出规律,步数为n~3的奇数之和。#include void main(){ int n,cnt; while(~scanf("%d",&n)) { for(cnt=0;n>=3;n-=2) cnt+=n; printf("%d/n",cnt); }}
2010-12-30 15:36:00 385
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人