![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM_CF
文章平均质量分 64
jason_star
我要变强!
展开
-
B - Suffix Structures(CF,255)
B - Suffix Structures原创 2014-07-18 10:41:46 · 677 阅读 · 0 评论 -
【codeforces】#99 E Mushroom Gnomes - 2
题目大意:有n棵树,m个蘑菇,每棵树有坐标a,高度h,向左边倒的概率,向右的概率(概率用0-100表示),向左倒范围[x-h,x)内的蘑菇被破坏,向右倒范围(x,x+h]范围内的蘑菇被破坏。每个蘑菇有坐标b,及它的魔力值z。 问树倒下后,所以蘑菇的魔力值的和的期望。思路:只需要成段更新出每个点不被压到的概率,然后期望计算即可。之前wa了很多次,就错在我对于懒惰标记原创 2015-03-08 18:46:39 · 532 阅读 · 0 评论 -
Codeforces Beta Round #35 (Div. 2) E (区间倍增处理区间问题,成段更新,必掌握)
题目大意:给你n个建筑的楼顶的高度,以及楼顶的左坐标l,右坐标r(可以看成是线段),问整个建筑的轮廓的转折点思路:其实这道题涉及到区间的处理。所以需要对区间进行倍增处理,才能在线段树当中达到真正的区间目的。关于转折点的判断方法。首先应该保存一个值y即此时的高度。也就是我们此时要判断的这个x坐标与它上一个x坐标的线段所在的高度。接下来是求出这个x坐标到下一个坐标的线段所在的高度tem原创 2015-03-09 22:45:16 · 428 阅读 · 0 评论 -
【CoderForce】#296 Div 2 D
题目大意:一开始看了半天看不懂,也不知道怎么做,就去看了status的代码。然后就懂了,题目是给你若干个点,每个点有一个w,然后|xi-xj|>=wi+wj的可以连一条线,题目最后求的就是最长的那条线最多有多少个点。思路:(xi,wi)它的辐射范围为(xi-wi,xi+wi)假如两个点的辐射范围相交的话,说明|xi-xj|#define _CRT_SECURE_NO_WARNINGS原创 2015-03-18 20:40:07 · 465 阅读 · 0 评论 -
【CoderForces】#296 Div2 C(线段树+set)
/*这边可以用线段树的原因在于,在水平方向上的最大值,与竖直方向上的最大值是相对应的,也就是说我们只需要求出了水平和竖直方向的最大值,然后相乘就可以了,一开始一直没想通这个,以为是不是对应的,那样的话就没法求了。线段树思路:两个线段树分别计算出水平方向和竖直方向的最大值,最后相乘就可以了。这么就涉及到区间的计算,所以需要两个数组来存水平方向和竖直方向的分割线。最后更新就可以了。也可以用其原创 2015-03-18 19:28:00 · 368 阅读 · 0 评论 -
【CodeForces】#296 Div 2 B(简单hash应用)
题目大意:两个字符串,每个位置不同的话,Hamming distance+1,最后问你最多交换一次的话Hamming distance变为多少,是交换哪一对的结果。思路:我是用hash记录下可以交换的那个位置,以及这个位置希望得到什么。最后通过遍历26个字母,找出交换使得Hamming distance-1或者-2的那一对,因为只交换一次,所以挺简单的。#define _CRT原创 2015-03-18 17:08:09 · 387 阅读 · 0 评论 -
Code Forces 298 A EXAM
题目大意:要你将n中的数排序,每个数必须与前面差值大于1。没有思路,最后还是看的别人代码。看来最近思维真的不行了。很简单的题目,只需要将奇数一起输出来,偶数再一起输出来就是答案了。不过有几个情况需要特判。1,2,3,4.都需要特判。#include #include #include #include using namespace std;int a[5500];原创 2015-04-14 13:21:16 · 389 阅读 · 0 评论 -
Code Forces 298 D Handshakes (思维要清楚)
题目大意:每个人需要握ai次手,有三个人话,这三个人可以选择去比赛,不和别人握手.问你入场顺序思路:对于编号来说,只要他需要握手的次数是一样的,那么无论放在哪里都是可以的.所以最终形成的序列他们需要握手的次数一定是0-k 0-x这样子的#include#include#include#include#includeusing namespace std;int a[2200原创 2015-04-14 20:25:27 · 500 阅读 · 0 评论 -
Code Forces 298 C Polycarpus' Dice
题目大意:有多个骰子。每个骰子可以转出1-d[i]内的所有数字。现在给你总和A,问你每个骰子不能够转出的数字有哪几个。结合一下样例应该就懂了。思路:我的思路是这样子的。对于一个骰子d[i];他所能够转出的数值是1-d[i];所以其他的骰子应该给他提供a-d[i],a-1之间的数,不能提供的就是答案。其他骰子可以提供的数为n-1,sum[n]-d[i];区间合并一原创 2015-04-14 13:52:08 · 447 阅读 · 0 评论 -
CodeForces 538C Tourist's Notes (简单题)
题目大意:你在爬山,总共有n个时刻,在hi高度.每次你可以选择不动,或者向上1或者向下1.现在给你最多高的时刻n,以及中间的m个记录表示该时刻在多少海拔.问在1-n内,处于的可能的最大海拔是多少.思路就不说了,只要遍历,检查这个时刻与上一个时刻否成立,方法看代码吧.这边说一下坑点.最大的坑点是一开始是多少高度是不确定的,假如第一个数据是a,b则一开始所处的最好的高度原创 2015-05-05 20:32:15 · 914 阅读 · 0 评论 -
【CodeForces】 19D Points(线段树|单点更新)
题目大意:将一个点加入或者删除,查找一个严格大于点。这边应用到了set容器,自动排序,以及方便的加入和删除。set a;a.insert(x);加入这个元素a.erase(x);删除这个元素*(--a.end())访问最后一个元素*(a.upper_bound(x))查找一个大于x的数sum存的是最大的y其他的就跟单点更新的线段树一样了#define _CRT_原创 2015-03-08 10:50:14 · 451 阅读 · 0 评论 -
【CodeForce】 46D Parking Lot (线段树 区间合并)
题目大意:有一条长度为L的街道,有N个操作,操作有两种,(1)"1 a",表示有一辆长度为a的车开进来想找停车位,停车位必须满足与它前面的车距离至少为b,与后面的车距离至少为f.如果能找到这样的停车位,输出这辆车的起始位置(且这个位置最小),否则输出-1。(2)"2 a",表示第a个事件里进来停车的那辆车开出去了思路:需要分4种情况1、没有前面和没有后面,也就是正好这个车的长度等于停车场的原创 2015-03-07 15:38:52 · 425 阅读 · 0 评论 -
【CF-496B】Secret Combination(最小字符串表示法)
每个数字字符串可以选择全部加一,超过9的变0.然后求出最小字符串。之前了解过最小字符串,可无奈还是忘了,不会写,所以又查了一下最小字符串的方法。转载一下别人的博客,写的比较详细,建议模拟一遍,再看一下证明,应该就懂了。多做几道题巩固一下最小字符串的表示方法吧。http://blog.csdn.net/zy691357966/article/details/39854359我的A原创 2014-12-18 10:47:11 · 742 阅读 · 0 评论 -
CF 467C - George and Job (简单区间DP)
题目大意:有一组数p,选择k组数,每组数是连续的m个数,求最后的大小,看样例比较好理解。思路:一开始我的想法便想到了dp[i][j]表示的是到i这个位置,已经取了j组数时候的最大和。不过接下来的想法跟我的代码实现不大一致,想法没错。我是想要求dp[i][j],那么他就等于前面dp[k][j-1]+p[i-m~i]或者是直接从前面dp[k][j]中选择最大的过来。原创 2015-02-01 11:27:04 · 668 阅读 · 0 评论 -
CodeForce 508C Anya and Ghosts (贪心+模拟)
题目大意:有m个时刻,在第i时刻即wi秒的时候需要保持有r根蜡烛亮着,每根蜡烛维持的时间为t秒,点一根蜡烛需要1秒。注意:一根蜡烛亮的时间为下一秒开始。并且一开始是可以事先准备蜡烛的。想法:利用了优先队列,维护r根蜡烛,每次wi秒,它需要开始点蜡烛的最晚时间为wi-t,如果不够这个时间,那么在最晚结束点蜡烛的时间wi-1开始补上。感谢阿扎夫人提供的思维题。AC代码:#defin原创 2015-02-02 10:59:07 · 891 阅读 · 1 评论 -
【CodeForce】509F Progress Monitoring(树形情景区间DP)
题目大意:有一段深搜的代码,是遍历一个邻接矩阵,然后输出一个序列,这个邻接矩阵的原形是一棵树,那么现在就是要你根据序列,求出最多有多少个不同的树遍历之后可以得到相同的序列。思路:这道题属于简单的区间DP,仔细点想就可以了。第一种方法也是最直接的思路。令dp[i][j]表示的是以i这个点为根,其余点为它的子树时,符合条件的最大个数。从样例可以想到1 2 3由于3和2交换之后,依然原创 2015-02-04 16:29:30 · 893 阅读 · 0 评论 -
【Coder Force】#360B - Levko and Array(DP 二分枚举)
题目大题:CF上的题目还是比较容易读懂的。这道题的意思嘛,他是说,有一个不超过2000个数的数组,每一个数与后面的数的绝对值称为value,那么所有当中最大的value就是整个数组的value,现在你有k次变换,每一次可以将其中的一个数变为任何一个使得数组价值最小的数。 假如题目的价值是所有的之和,也可以用这道题的方法。 思路: dp[i]表示的是到i这个位置,使得数组符合条件的最少变换次数。原创 2015-02-08 21:00:53 · 651 阅读 · 0 评论 -
【Coder Force】264C - Choosing Balls (DP高难度思维转换)
卡了2天,说多了都是泪。/*该点的最大值的可以由前面某个点加上相应的值得到。而前面的点可以分析为以下的条件1、前面的这个点与该点颜色相同。2、这个点与这个点颜色不同。3、前面没有点。现在分析:由于1、3两个条件已经是o(1)的时间,所以不需要优化。主要的时间出在于2的时间,2需要遍历。假设2里面有n个条件需要判断,其实归结起来,我们只需要判断两个情况1、这个点的颜色与该点相同2原创 2015-02-09 11:13:50 · 754 阅读 · 0 评论 -
【CodeForces】343D Water tree (线段树好题!还未弄懂)
/*此题的方法除了用线段树求子树,通过标记父亲,更新儿子的方法,来更新祖先,学习了。对于建树的方法由于并没有说明父亲与儿子的顺序,所以需要通过两次添加。并且pre变量可以获得父亲的位置,还未弄懂!*/#define _CRT_SECURE_NO_WARNINGS#include<cstring>#include<cstdio>#include<iostream>#include<al原创 2015-02-26 22:24:18 · 1173 阅读 · 0 评论 -
【Code Forces】221D - Little Elephant and Array(线段树,思维做法)
/*确实,这道题需要明白的一点是在于条件的严格,所以,虽然有十万个数,但满足的数最多就450个,在一组数据当中。所以才采用的方法便是先将数离散化,为了存入结构体数组,这样是为了将个数对应起来,所采用的是map判重以及存储结构体的数组下标。接下来是遍历结构体数组,找出符合条件的数,条件是该数小于他的个数,这样才有机会满足。之后只需要遍历这些数在数组中从1开始到某个位置出现的个数即可。最后做原创 2015-03-01 14:35:32 · 561 阅读 · 0 评论 -
【Code Forces】518A Vitaly and Strings(思维题)
题目大意:第一个字符串小于第二个字符串。现在要找到一个字符串大于第一个字符串,小于第二个字符串。思路:其实这边不需要遍历,将两个字符串看成数来处理就可以了。这样的话就等价成两个数当中是否相邻的问题。所以只需要对第一个字符串最后一个字符加1,这样就能够保证大于第一个字符串,而且是离第一个字符串最近的那一个。加1之后可能要进行进位处理。然后与第二个字符串比较一下就可以了。#de原创 2015-03-25 12:32:00 · 553 阅读 · 0 评论 -
CodeForces 538B Quasi Binary(不错的贪心题 进制想法)
题目思路:你现在有一些数叫quasibinary ,这些数仅由0 和1构成,如10,.101,0,1现在给你k,你要用最少的quasibinary 数,加起来等于k,先输出个数,然后输出这些数是哪些.一开始的思路比较挫,而且严重错误.这边说一下正确的思维方法:由于我们有的数仅仅是0和1,所以这边假设4135,则至少要加5次.而且也只需要5次,因为个位无论我们取什么,他每次都是1原创 2015-05-05 19:41:36 · 1370 阅读 · 0 评论