
高效
playwfun
宁静致远
展开
-
UVA - 1326 (中途相遇法 + 统计奇偶)
#include #include #include #include #include #include using namespace std; const int maxn = 25; char str[111111]; int a[maxn*3],b[maxn*3],n; map vis; struct RES{ int num; int s1,s2; RES(int x,原创 2014-11-11 20:28:39 · 569 阅读 · 0 评论 -
HDU - 5110(递推)
#include #include #include using namespace std; const int maxn = 1001; const int N = 5; int rsum[maxn][maxn][N],d[maxn][maxn][N]; int a[maxn][maxn],SUM[maxn][maxn],n,m,Q; int sum(int i,int x,int y原创 2014-11-23 13:34:37 · 712 阅读 · 0 评论 -
uva - 1471(动态维护序列二元组)
本题的题意就是从长为n的串中截取一段,把剩下的两端拼接起来构成一个可以够成的最长连续上升子序列。 首先本题若直接按照题意来先枚举截取的起点和终点在数一数就需要O(n^3)时间复杂度。n为2*10^5太大。 价格预处理就可以避免数一数、 以f(i) 表示以i位置为开头的连续上升序列的长度。g(i)表示以i位置为结尾的连续上升序列的长度。 然后只需优化枚举环节。 可以只枚举右端点,快速找到原创 2015-03-09 13:34:10 · 428 阅读 · 0 评论 -
UVA - 1611(构造类)
题目大意就是给定的一个长为n的串只让对长度为偶数的区间的两半 半对半交换(而非翻转),用不超过9^6(最坏接受nlogn的算法)次操作完成排序。 方法, 第一开始并没有没有想到脑筋陷入了死点。 其实,就是采用往常的递推式思想,如果能解决了把1放在1处,那么剩下的就是个子问题。 怎样将1快速放到1处,其实1在1处不用在考虑。若1在中点位置(偶数情况下选靠右的中间位置)则通过其次交换即可。原创 2015-03-11 21:18:18 · 539 阅读 · 0 评论 -
UVA 11491
这道题有点水了,只是第一次做的时候陷入了误区,那时候学的是贪心。光记得贪了。 这题目等价于把一个长为n的串保留一个字串使得把它看做一个10进制数的时候尽量大。 做法,也离不开贪心思想。 选取第一个数字时候,要在后面留下一个长度+1足够构成要求串的区间。然后在前面的区间选取最大值第一次出现的位置,即可。后面数字选取雷同。 记得求最大值时候要优化,树状数组求区间最值不理解,干脆上了线段树。原创 2015-03-11 21:28:22 · 960 阅读 · 0 评论 -
uva - 1442(cav 递推类 ,思路)
由于燃料为流动性物质。 所以利用任意一个有水的地方往左右延伸其水平面一样高, 可以先从左以尽量高的起点往前延伸遇到顶,下降到顶。遇到地面,上升到与地面同高度。 这样再从右往左贪心一边去每个点的最小值即可。 #include #include #include #include #include #include using namespace std; typedef long原创 2015-03-11 19:23:38 · 490 阅读 · 0 评论 -
UVA - 12174(滑动队列优化)
本题目是给定一个序列,该序列是1到k的不同排列的拼接中切出的一段,让判断下一个排列的开端可能在哪里。 那么,首先用滑动队列,求出以i位置为结尾的长为k的序列是否可以构成一个排列,要注意两边的考虑, 然后枚举开始点,判断后面的排列是否合法即可。这样枚举起点,加上判断总共的复杂度接近o(n) #include #include #include #include using namesp原创 2015-04-21 13:40:47 · 531 阅读 · 1 评论 -
codeforces 589C(divide and conquer)
题意: 给定一个长度不超过100的原串,让重复复制现在的串,然后向右循环移动pi次,粘贴到串的右端,重复该过程n次(每次串长都将翻倍), 给定m(m 分析: 由于(1 可以这样来看问题 记 f(i) 为从初始位置开始特定字母出现的次数,ans = f (r) - f(l-1); 这样的查询,使我们想着能不能够递归60层,不分叉的统计出结果, 答案是可以的 , 注意到 深度为 i原创 2015-11-03 11:29:32 · 517 阅读 · 0 评论 -
uva 1618(枚举技巧)
直接说解法: 我们只考虑1 Ns > Np > Nr 的这种情况,先枚举 p , q 的位置 , 那么先选s的位置,s的位置越靠后越好,这样会留下更大的空间选r 又知道所有数不同,离散化位1 到 n , 那么假设p , q 位置确定 ,以pos数组记录每个1 -- n 每个离散化后的数对应的数组位置, 那么 s的最佳位置为 pos数组 上 Np + 1 --> Nq - 1 这个原创 2016-04-11 20:30:41 · 940 阅读 · 0 评论