上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 23 下一页
摘要: 维护一个整数序列,支持3种操作:1、将指定的数加上一个值;2、将指定的数减去一个值;3、查询指定区间的和。View Code #include <stdio.h>#define N 50001int t,n,D;int sum[4*N];void init(){ int i; for(D=1;D<n+2;D<<=1); for(i=1;i<2*D;i++) sum[i]=0; for(i=1;i<=n;i++) scanf("%d",&sum[i+D]); for(i=D-1;i^1;i--) sum[i]=sum[i< 阅读全文
posted @ 2012-07-11 16:43 BeatLJ 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 这题可以看成是“集训每日一题0711”的简化版,没有修改操作,只需查询最小和最大的。View Code #include <stdio.h>#define MIN(a,b) ((a)<(b)?(a):(b))#define MAX(a,b) ((a)>(b)?(a):(b))#define INF 0x7fffffff#define N 50001int n,m,D;int min[4*N],max[4*N];void init(){ int i,t; for(D=1;D<n+2;D<<=1); for(i=1;i<2*D;i++) { min[ 阅读全文
posted @ 2012-07-11 15:33 BeatLJ 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 维护一个整数序列,支持以下操作:1 x v : 将第x个整数的值修改为v;2 x y : 查询区间[x,y]之间的最小值;3 x y : 查询区间[x,y]之间的最大值;4 x y : 查询区间[x,y]内的整数和。数据保证查询结果均在int范围之内,但中间结果是否可能溢出呢?我交的程序没考虑这个也AC了。通过这题还发现一个奇怪的现象,用memset初始化的程序跑了2s多,而用for循环初始化的程序才跑468ms……for循环初始化(468ms)#include <stdio.h>#include <string.h>#define MIN(a,b) ((a)<( 阅读全文
posted @ 2012-07-11 13:32 BeatLJ 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 维护一个整数序列,支持2种操作:1、修改:将给定区间中的每个数增加一个值;2、查询:查询给定区间中所有数的和。View Code #include <stdio.h>#define N 100010#define Node 800000int n,m,x[N];long long sum[N];int left[Node],right[Node];long long incsum[Node],inc[Node];void create(int i,int l,int r){ left[i]=l; right[i]=r; inc[i]=0; incsum[i]=0; ... 阅读全文
posted @ 2012-07-11 11:21 BeatLJ 阅读(234) 评论(0) 推荐(0) 编辑
摘要: Description给出的表达式全为合法的四则运算表达式,含括号。Input每行一个表达式,数字全为int型整数,长度不超过100字符Output输出表达式的值,一律保留小数点后4位。Sample Input11+2-1+2-1+(-2) Sample Output1.00003.00001.0000-3.0000 代码写得很混乱……对于括号的处理,我用的是递归调用,对于运算符的优先级的处理,我是通过2遍扫描来完成的,第一遍计算乘除运算,第二遍计算加减运算。View Code #include <stdio.h>#include <string.h>#define N 阅读全文
posted @ 2012-07-10 14:58 BeatLJ 阅读(342) 评论(0) 推荐(0) 编辑
摘要: DescriptionDr.Kong设计的机器人卡多非常爱玩,它常常偷偷跑出实验室,在某个游乐场玩之不疲。这天卡多又跑出来了,在SJTL游乐场玩个不停,坐完碰碰车,又玩滑滑梯,这时卡多又走入一个迷宫。整个迷宫是用一个N*N的方阵给出,方阵中单元格中填充了一个整数,表示走到这个位置的难度。这个迷宫可以向上走,向下走,向右走,向左走,但是不能穿越对角线。走迷宫的取胜规则很有意思,看谁能更快地找到一条路径,其路径上单元格最大难度值与最小难度值之差是最小的。当然了,或许这样的路径不是最短路径。机器人卡多现在在迷宫的左上角(第一行,第一列)而出口在迷宫的右下角(第N行,第N列)。卡多很聪明,很快就找到了 阅读全文
posted @ 2012-07-10 12:41 BeatLJ 阅读(672) 评论(0) 推荐(0) 编辑
摘要: Description设S是一个合法的表达式,E为一个数字字符序列,则合法的表达式可以表示为:E, +E, -E, (S),+(S),-(S),S+(S),S-(S),S*(S),S/(S) 等。(E可以是全‘0’的字符串)。请注意+S, -S, S+S等不一定是合法的表达式,因为可能出现如“+-E”运算符相邻情况,另外出现“()”括号中没有元素的表达式也是不合法的。Input每行一个字符串,最长不超过1023个字符。可能有空行。Output如果表达式合法,输入“Yes”,否则输入“No”,然后换行。如果表达式为空,则输出一个空行。Sample Input-1+2+-1+2+(-1+2)()- 阅读全文
posted @ 2012-07-10 10:38 BeatLJ 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 这题就是裸的最短路,而且边权都为非负,可以直接用dijkstra来求。写这题主要是为了练习一下dijkstra的优先级队列实现,提交后运行时间为63MS,比一般的dijkstra快一点(97MS)。后来又尝试用SPFA写,结果还是63MS。在写dijkstra的优先级队列实现和SPFA的过程中发现,这两个算法非常类似,不过,SPFA用的是一般的队列。SPFA #include <stdio.h>#include <string.h>#include <queue>using namespace std;#define MIN(a,b) ((a)<(b) 阅读全文
posted @ 2012-07-09 14:59 BeatLJ 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 求欧拉道路的题,可能是回路,也可能不是回路,若存在奇度点,则应从奇度点开始找路径,为保证最后的路径是字典序最小的,找路径时必须遵循小结点优先的原则。View Code 1 #include <stdio.h> 2 #include <string.h> 3 #define MAX(a,b) ((a)>(b)?(a):(b)) 4 #define N 501 5 int n,m,g[N][N],d[N],path[N],top; 6 void dfs(int u) 7 { 8 int v; 9 for(v=1;v<=n;v++)10 {11 if(g[u... 阅读全文
posted @ 2012-07-09 08:53 BeatLJ 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 匈牙利算法是用来求二分图匹配的算法,一般有bfs和dfs两种实现,我一般都是写的dfs的实现,感觉这个比较好理解,实现也比较简单。二部图:若一个图的顶点可以划分到2个集合,使得每个集合内的顶点之间没有连边,那么这个图就叫做二分图或二部图。二分匹配问题:求最大边无关集。交替链:二分图的一条路径,路径的起点和终点来自于不同的集合,且均未被标记(未匹配),且路径中的相邻结点来自不同的集合。匈牙利算法:存在交替链<=>存在更优匹配为什么在maxmatch中只需对每个结点一次求一次交替链即可?答:因为每求一次交替链后,可能增加匹配成功的结点,上一次匹配成功的结点不会变(匹配方式可能变了),而 阅读全文
posted @ 2012-07-07 08:33 BeatLJ 阅读(336) 评论(1) 推荐(1) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 23 下一页