![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
acm训练
文章平均质量分 64
LbyG
脚踏实地
展开
-
ZOJ 3334 Body Check
zoj3334看病一共分两种情况一种是m个医生都在工作,另一种是1个医生在工作。我们分两种情况来处理:1、医生m>病人n因为一个病人最多被一个医生治疗,所以只能选择1个医生去看病,总的时间花费是sum2、医生m假设m个医生工作的时间是t,那么只有1个医生在工作的时间是sum-t*m,总时间花费是sum-(m-1)*t。那么就是要找出一个尽可能大的t最大的t是sum/原创 2015-01-29 22:44:15 · 700 阅读 · 0 评论 -
poj 2155 Matrix(二维树状数组)
题目大意:有一个N*N的数组a,初始值为1分为两种操作:操作一:将所有满足x11,1->0操作二,询问a[x][y]是什么。 可以将反置变成所有区域每一个数都加一,最后将(a[x][y]%2)输出这一题是用二维树状数组更新区间、单点查询的题。对于操作一,进行如下维护:h[x1][y1] ++; h[x1][y2+1] --; h[x2+1][y1]--; h[x原创 2015-09-03 21:16:31 · 481 阅读 · 0 评论 -
poj 2352 Stars (树状数组)
题目大意:在一个平面上给n个节点。每一个节点的level为其左下方的节点个数(即xi >= xj, yi >= yj)求level为0、1、2、3.....、n-2、n-1的节点分别有多少个 (因为坐标有0,所以所有的横坐标都加一,否则可能进入死循环) 这一题最首先的想法是用二维树状数组,可是空间复杂度太大。因为问题是求左下方的节点数量,所以可以改用一维树状数组维护原创 2015-09-03 17:54:00 · 300 阅读 · 0 评论 -
poj 1195 Mobile phones (二维树状数组)
题目大意:有一个S*S的数组。有两种操作:一、h[X,Y]加上A二、查询所有x1 这一题是一道二维树状数组的模板体。如果要查询(x1,y1,x2,y2)的值:只要查询query(1, 1, x2, y2) + query(1, 1, x1-1, y1-1) - query(1, 1, x2, y1-1) - query(1, 1, x1-1, y2)这个查询和维护可原创 2015-09-03 16:43:13 · 308 阅读 · 0 评论 -
树状数组求区间最大值
讲这个的博文已经不少了,但感觉不够详细不够通俗易懂,所以我尝试着更详细更通俗易懂的说一下我的理解。 这个算法只支持单点修改和区间查询最值。每一次维护和查询的时间复杂度都是O((logn)^2),但这是满打满算的时间复杂度。假设是要维护和查询区间的最大值(最小值将max改成min 就好了)这个算法和树状数组维护和查询区间和的方法很相似: 一、数组的含义1、在维护和查询区间原创 2015-09-04 10:42:56 · 25226 阅读 · 20 评论 -
POJ 2481 Cows (树状数组)
题目大意:给n个闭区间,求每个闭区间是多少个其他闭区间的真子集。 这一题先不考虑有相同闭区间的情况。i区间是j区间的真子集,则有Ej 所以可以将这个n个区间按照 “若Y大则大,若Y相同则X小的大” 的规则从大到小排序bool operator < (const cow &a, const cow &b){ if (a.y == b.y) return a.x < b原创 2015-09-03 12:25:56 · 309 阅读 · 0 评论 -
poj3067 Japan (树状数组)
题目大意:左边有n个点,从上到下依次为1、2、3、......、n-1、n右边有m个点,从上到下一次为1、2、3、.......、m-1、m然后有k条路,分别连接左右两边的点。求这些路之间的交点有多少。每个交点至多被两条路径经过。 这一题的做法:这一题其实就是求逆序对的稍微变化。只要将k个路径按照:x大的大,若x相等则y大的大。代码:bool operator原创 2015-09-02 17:12:17 · 337 阅读 · 0 评论 -
poj 2299 Ultra-QuickSort(树状数组)
题目大意:给一串数字,问冒泡排序需要进行多少次交换 其实稍微模拟一下就可以发现,这一题其实就是要求逆序对的个数不过要解决一个问题就是:这些数组太大,难以用树状数组进行维护,可以用坐标离散化来做,因为每个数字都不相同,所以很好实现的我的离散化实现:sort(a+1, a+n+1);for (i=1; i<=n; i++) b[a[i].id] = i;其它的按照求逆序原创 2015-09-03 18:20:46 · 352 阅读 · 0 评论 -
hdu4747 Mex (线段树 好题)
(这次的代码写得非常的丑,因为敲代码时的环境非常的乱,大家可以不用看了。。。。。。) 题目大意:给一个数字串。然后定义一个函数Mex({A}) = A中没有的最小的非负整数。即若A = {0、1、3},则Mex(A) = 2然后要求数字串的所有连续子串的Mex值之和。 总结:这一题我想了很久。这一题的解放真是太有意思了,处于我思维的一个盲点。我一开始想过处理原创 2015-09-07 18:45:45 · 638 阅读 · 0 评论 -
hdu 1394 Minimum Inversion Number (树状数组)
题目大意:给你一个1到n的排列(虽然题目是0到n-1的排列但加1一下就好了)如是a1、a2、a3、.......、an-1、an然后可以进行这样的操作:将第一个数放到最后,变成:a2、a3、a4、.......、an-1、an、a1每次这样可以得到n个不同的串。问这n个不同的串中,逆序对数最小的串的数量是多少。 这一题有一个关键的信息就是:这是一个1到n的排列利用这个信原创 2015-09-02 16:11:51 · 346 阅读 · 0 评论 -
hdu 1556 Color the ball (树状数组解决区间覆盖+单点查询)
题目大意:中文题目,就不说了。 这题的具体做法是:对于覆盖区间[a,b],让h[a] = h[a] + 1,h[b + 1] = h[b + 1] - 1。然后要查询x被覆盖了多少次,h[1]+h[2]+h[3]+......+h[x-1]+h[x]的值就是答案 我的代码#include #include #include using namespace std;原创 2015-09-02 16:24:15 · 382 阅读 · 0 评论 -
hdu4638 Group(树状数组)
题目大意:给一个1-n的排列,然后询问[x,y]区间中有多少个连续的段。如给一个3 1 2 5 4, 查询是2 4,那么就是问1 2 5中有多少个连续的串,一共有两个串,1、2为一个串,5为一个串若查询是2 5,则问的是1 2 5 4中有多少个连续的串,一共有两个串, 1、2为一个串, 4、5 为一个串。 反思:这一题我想了蛮久的,因为我一直想要去维护每一个串的首个数字,但想了原创 2015-08-27 14:16:54 · 382 阅读 · 0 评论 -
hdu4267 A Simple Problem with Integers
题目大意:解释起来有些麻烦,直接贴一下英文版好了Problem DescriptionLet A1, A2, ... , AN be N elements. You need to deal with two kinds of operations. One type of operation is to add a given number to a few numbers in a g原创 2015-08-27 21:29:13 · 334 阅读 · 0 评论 -
codeforces290 A.Fox And Names
注意事项:我的这个解法需要特判一种情况,就是一开始就是错误的情况,如:INPUT:3BBBBBBOUTPUT:Impossible可知只要满足对任意 i 都有NAME[i] > NAME[ i+1 ] , 既整个序列就有序所以根据NAME[ i ] > NAME[ I+1 ] i = 1、 2 .... N-1得出N-1个字母大小关系。如:3r原创 2015-02-08 19:13:43 · 371 阅读 · 0 评论 -
codeforces290 B.Fox And Jumping
思考过程:哪些数字组合起来可以达到每一步都能走到呢?若一开始是在0号位,那么能走到1号位置就能达到每一步。那哪些数字组合在一起可以达到1呢?由数论知识可知存在a、b,使a*x + b*y = gcd(x, y)于是可以得到,存在a1、a2.......、an-1、an,使a1*x1 + a2*x2 + ....... + an-1*xn-1 + an*xn = gcd(x1原创 2015-02-08 19:34:09 · 321 阅读 · 0 评论 -
uva 10934 Dropping water balloons
注意事项这一题没有说明一定可以测出来也就是说当楼层 n = 1 的时候答案是1,依然需要进行一次测试思路:一开始最自然的想法是f[n, k]n表示楼层,k表示拥有的水球数,f[n, k]表示需要的最小尝试数。但发现这样定义状态的话,状态数我怎么也压不下去。现在就3个状态:水球数,尝试数,楼层数。楼层数是2^63,很大水球数是100尝试数是63所以我尝试用原创 2015-01-31 22:17:58 · 397 阅读 · 0 评论 -
URAL 1309 Dispute
先简述一下题目吧:f[0] = 0;f[n] = g(n, f[n-1]);g(x, y) = ((y-1)x^5 + x^3 -x*y + 3*x + 7*y) % 9973如果直接去算,n后面看了书上的题解。先将f[n] = g(n, f[n-1])和g(x, y) = ((y-1)x^5 + x^3 -x*y + 3*x + 7*y) % 9973结合f(x) =原创 2015-01-31 21:16:00 · 437 阅读 · 0 评论 -
uva 1335 - Beijing Guard
以后需要注意的事情:在写完后应该先将整个程序检查一遍再交。思考过程:分两种情况1、人数为偶数个因为只要分成编号为奇数的和编号为偶数的,大家各自拿一部分中的就好了那么需要的礼物数就是相邻的两个数的和的最大值既max(a[i]+a[i-1],a[n]+a[1]) i=1,2......,n-1,n2、人数为奇数个从1给礼物,一直给到n-1,到给n礼物的时候需要既不原创 2015-01-29 17:14:15 · 417 阅读 · 0 评论 -
hdu 3974 Assign the task (线段树)
错误总结:这一题没有1A,主要原因是有点累,在敲代码的过程中注意力有些无法集中起来。最后导致在调用函数的地方传参数传错了!!!检查的时候只把函数认真看了一遍,而调用函数的地方却漏看了!!!!以后要注意! 题目大意:给一个有根数,然后有以下两种操作。操作一:T X Y ,将以X为根的子树上的所有节点都变成Y操作二:C X,查询第X号点是多少? 这一题初看是一道维护原创 2015-09-04 21:56:34 · 454 阅读 · 0 评论