上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 15 下一页
摘要: 呃, 水题一枚,暴力就可以轻松过,但是还是想通过这种水题来让自己熟悉一下学过的算法,于是用了几种方法完成,呵呵,收获还是很多的~1、暴力过了一下,1A,呃,这个代码就不贴了,自认为代码写的还是很烂的,跑了16ms。2、二维树状数组。通过它终于弄明白二维树状数组是怎样求区间和的了。s[i][j] 表示从( 1 , 1 )->( i , j )的和,则要求( xi , yi )->( xj , yj )矩形的和话,则要表示为s[xj][yj] + s[xi-1][yi-1] - s[xi-1][yj] - s[xj][yi-1] ,其实一画图就能明白的,代码:View Code #in 阅读全文
posted @ 2012-08-11 16:38 Misty_1 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 题意:给出两个数N和K,让你改变N中的某些数,找到一个数M,是的M%k== 0 ,并且找到的M要尽可能小。思路:呃,其实我真的不擅长搜索,特别是搜,不过这题还是学到了很多东西。首先是一种大整数取模的方法。其实是参考着这篇解题报告学会的,http://blog.csdn.net/lyy289065406/article/details/6698787对于这题,他讲的很详细,我也是参考他的思路,所以就不说了。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include 阅读全文
posted @ 2012-08-11 10:20 Misty_1 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 呃,有好久没写博了,很无奈呢,每次做完题总是会忘了这最后一步。。。。这题是上次比赛的一道题,比赛中就认为这题有技巧,其实在比赛中XH就找到了结论,但是由于当时我们俩都没接触过快速判素和快速求质因子的方法,也就是Miller_Rabbin和Pollard_Rho方法,所以尝试了几次打表,结果没过,然后就不了了之了。赛后看了解题报告,知道思路没错,有用打表的方法做了两遍,还是原样,题解中说用到了Pallard_Rab求质因子,所以就上网搜搜了,然后直到今天才做这题。题意:求出N的所有因子,然后选出尽可能多的元素,是的选出的元素两两互质,求出最长的长度和这些元素的最大和。思路:为了尽可能多的选出,每 阅读全文
posted @ 2012-08-10 21:17 Misty_1 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 题意:有N个城市M条路相连,有两种收费方式,一种是在城市Ci时收费为Pi,另一种是在城市Bi中Ri,求从城市1到城市N的最小花费。其中Pi要小于Ri。思路:其实我觉得这就是一道变形的最短路问题,虽然是用的深搜,但原理是一样的。首先将于城市Ai相连的城市都存起来,然后用一个数组记录城市I是否被访问过,如果访问过,当然可以直接在城市I缴费,原以为每个点访问一次就行了,可是后来想一想,不是这样的,要是这样的就没法提前在Ci城市缴费了,后来在网上看到有人是“闸数”,也就是一个点最多不会被访问超过3次,否则就退出,然后就按这个方法来做的~代码:View Code #include <stdio.h 阅读全文
posted @ 2012-08-08 19:59 Misty_1 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 先说一下我了解的压缩状态dp吧。经典的压缩dp问题是TSP问题:一个n个点的带权的有向图,求一条路径,使得这条路经过每个点恰好一次,并且路径上边的权值和最小(或者最大)。或者求一条具有这样性质的回路。压缩dp问题中存储点集是利用二进制形式,比如 3 = 0000,0000,0000,0011 表示第一个和第二个点在点集中,5 = 0000,0000,0000,0101 表示第一个和第三个点在点集中,以此类推。呃,简单来说,就是用一个数表示一种状态,一般n<= 16 或n <= 32 。状态转移:如果状态存在,dp[i][j] = 0 ,否则为无穷大.1、状态存在:dp[i][j] 阅读全文
posted @ 2012-08-08 11:31 Misty_1 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 题意:给出N个星星的坐标,level[x]表示在当前节点左下方的星星的个数,然后让你输出level[0] . level[1] .....的值。星星的坐标按y的升序给出。思路:简单线段树,每当给出一个坐标,在他所在区间就自加1,然后查到该节点,得出在左下方的星星数,就可以了。看代码吧,View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include <queue> 阅读全文
posted @ 2012-08-06 16:21 Misty_1 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 题意:有N个点是连通的,现在给出Q个操作,D是破坏这个点,R是恢复最近被破坏的点,Q是询问与这个点相连的点的个数。思路:这题与上次比赛的最后一题有点相似,比赛的题是让求从该点往后的相同的字符的个数,而这题是求与这个点相连的点,包括前后。其实线段树也很好理解,节点设四个标记,最左端点,最右端点,从左端点开始,与左端点相连的点的个数,从右端点开始,与右端点相连的点的个数,随时更新,查询时是,先找到最左端相连的区间,然后不断向右找到不相连的点。呃, 还是看代码吧。代码:View Code #include <stdio.h>#include <stdlib.h>#includ 阅读全文
posted @ 2012-08-06 15:40 Misty_1 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 题意:N个数字,Q个操作,Q表示询问[s,t]中的数据和,C表示从s到t中的每个数据都加上x;思路:简单的线段树,把每一段放入和存入结构体中,但是如果每次更新都更新到叶子节点的话,会超时,因此在结构体中加入一个标记,记录每个区间的增加量,这样不用再更新到叶子节点,当查询的时候加上即可。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include <queue& 阅读全文
posted @ 2012-08-06 15:11 Misty_1 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一个非降序的数组,给出Q个询问,每个询问给出起点和终点,问在这个区间中出现频率最多的数字的次数。思路:这题可以用线段树,不过最近在学RMQ,所以用ST做的。这题的难点在于初始化,初始化后直接套模板就行了,来说说初始化吧。一个区间会出现三种情况:1、1111111111111,整个区间都被同一个数字占据,那么直接返回(r-l+1)就行了,2、1111122222222,整个区间只由开始和结尾两种数字组成,这种情况返回两者中较大的。3、11111222233333,区间中除了两头的数字还有其他数字,那么就用ST求出最大值就行了。对于每个数字出现的次数,用两个数组来存,一个数组存到目前为止 阅读全文
posted @ 2012-08-06 14:47 Misty_1 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 好几天没写博,还是没形成习惯啊,最近都在做线段树和树状数组方面的题,树状数组和线段树有一些相似的地方,有些题既能用线段树又能用树状数组,所以就都先用一下,不过还是不熟练。那好吧,几天补齐前几天的博。题意:给出N个数字和Q个询问,每个询问给出起始位置和终止位置,求出这段区间中最大数字和最小数字的差。思路:RMQ的思想就是求一个区间中的最值,用ST求出区间最大值和最小值,然后求差。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream&g 阅读全文
posted @ 2012-08-06 14:31 Misty_1 阅读(161) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 15 下一页