
OJ——Codeforces
文章平均质量分 71
普通网友
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
codeforces 488D Strip 线段树+dp+二分
题意:给你n个数,把这n个数分了几块(piece),问你最后分得的最少块数。要求:1.每块长度>=L 2.每块的最大最小值的差值不得大于s思路:很容易想到了用dp,但O(n^2)明显会超时。查询区间最大最小值,自然想到线段树。因此。可以这样来实现:定义dp[i]:前i个数,分割的最小块数。转移:dp[i] = min(dp[j]+1);(i-j>=l)建两颗线段原创 2014-12-12 16:25:30 · 749 阅读 · 0 评论 -
Codeforces 527C Glass Carving (set+multiset)
题意:对于一个矩形,宽为w,高为h。现在对其进行一系列的切割。让你求出每次切割后的最大面积的矩形(最大的矩形包含了前面所切割出来的矩形,我就因为这个弄错题意= =)。思路:set:内部已经有序,记录已经切割了的位置。multiset:内部已经有序,记录切割出来的长度。lower_bound(val):返回第一个>=val的数的位置。(二分)每次切割的时候,在set里面寻找最原创 2015-03-19 14:39:56 · 821 阅读 · 0 评论 -
Codeforces 540E Infinite Inversions 离散化+树状数组
题意:有一个无限长序列。进行n次操作,每次把下标为i, j的两个值交换。最后问你整个序列的逆序数的个数。思路:求逆序数分为两部分。一部分是交换过位置的,另一部分是没有交换过的。第一部分:用map处理n次操作后的情况。离散化后,利用树状数组求出交换过的位置的逆序数的个数。第二部分:看一个样例:21 69 5得到的序列为6 2 3 4原创 2015-05-03 21:29:26 · 903 阅读 · 0 评论 -
codeforces 515e Drazil and Park 线段树、区间最大子段和
题意:在一个公园里,有n棵树围成一个圈。每棵树的高度h以及相邻两棵树的距离d已给出。现在要选择两棵不同的树,使得2*(h1+h2)+dis(d1,d2)的值最大。每次询问都给出一个区间,所给的区间有小孩子在玩耍,因此不能进入。1.l 2.l > r, 则[1,r]和[l,n]不能进入;数据保证剩余的至少有两棵树是可以被选择的。思路:区间最大子段和,线原创 2015-03-12 16:43:47 · 846 阅读 · 0 评论 -
codeforces 520d Cubes 贪心+set
题意:把一些1*1的方形放在二维平面上,每个方形有唯一的编号值(0~m-1),y = 0为地面。现在给出每个方形左下角的坐标(一开始构成的图保持稳定),两个人轮流把它们拆卸下来,从左到右摆放,并且保证拆卸过程方块保持稳定。方形上的每个数值都是m进制,转换成十进制并且模上10^+9.先手希望最后的值大,后手希望最后的值小。思路:一开始题意都看不大懂,后来翻了下别人原创 2015-03-11 20:43:34 · 616 阅读 · 0 评论 -
Codeforces 527D Clique Problem (dp+树状数组+离散化)
题意:在x坐标轴上有n个不同的点,每个点位置为xi,点权为wi。若|xi - xj| ≥ wi + wj.该式子,则i和j点可以连一条边。现在让你找出一个最大的点集,使得集合内任意两点有一条边连着。输出最大点集内点的数量。思路:感谢杰哥提供的思路。dp:现有3个点,x1 若x1和x2有边相连,x2和x3有边相连。即d1 >= w1+w2;d2原创 2015-03-20 12:55:33 · 617 阅读 · 0 评论 -
Codefoces 520C DNA Alignment 乱搞题
题意:有一个字符串s,仅由’AGCT‘4个字母组成。现在要找出有多少个字符串t,满足p(s,t)最大。p(s,t)函数看题面。思路:一开始一直没想通,后来经铭神指点后豁然开朗。。对于字符串s,统计出每种字符的个数。如果最大个数有x种字符,则结果就是x^len。(len为字符串长度)。为什么是这样呢?其实原因很简单。在t完成一轮shift的时候,t字符串中的每个字原创 2015-03-15 15:44:48 · 475 阅读 · 0 评论 -
codeforces 514d R2D2 and Droid Army (RMQ+二分)
题意:有n*m的矩阵,然后你有k发子弹。现在你可以朝着任意列发射子弹,每一发子弹都会使该列上的数值-1,最小减少到0。现在问你连续最长的行数,在k发子弹内,使得这些行上的数值全部为0.思路:看了别人代码,其实RMQ不是必要的,开m个双端队列也可以。因此每次要问一段范围内的最大值都是按顺序下去的,队列可以解决。二分长度len,枚举n行是否存在这样的i~i+len-1,所需原创 2015-02-16 16:10:24 · 567 阅读 · 0 评论 -
codeforces 515d Drazil and Tiles
题意:有一张图,让你往里面填"思路:看了官方题解,自己也想了一下,感觉顶对的。步骤:1.首先把每个‘.‘看成是一个顶点,求出每个'.'与周围的’.‘的点连成图的度数。(如果有度数为0的点,则是无解"Not unique")2.把度数为1的放进队列。3.从队列中取出第一个顶点,把与其匹配的点标记掉。然后查看是否有没有被标记且度数减为1的点,有则放进队列。4.继续操作,原创 2015-02-19 14:36:18 · 582 阅读 · 0 评论 -
codeforces 166e Tetrahedron 水dp
题意:略思路:定义dp[i][x]:走了i步,刚好走到x的种数。转移:把另外三个位置的种数累加到当前位置上。code:#include using namespace std;const int MAXN = 1e7+5;const int MOD = 1e9+7;int dp[MAXN][5];inline void add(int &a, int b) {原创 2015-02-19 21:49:40 · 700 阅读 · 0 评论 -
CodeForces 349B Color the Fence (dp)
题意:给出1~9数字对应的费用以及一定的费用,让你输出所选的数字所能组合出的最大的数值。思路:dp一开始想歪了(sort并不对= =)。dp[i]:费用为i时,最大所能得到的数字个数。par[i]:记录当前i的状态是由前面哪个状态转移来的。path[i]:记录费用到i时,所选的数字。输出方案时,根据par数组从n往回跳,直到为0。途中把path中的数字记录个原创 2015-02-19 22:57:05 · 782 阅读 · 0 评论 -
codeforces 543d Road Improvement 树形dp
题意:在一棵根节点为1的树上,一开始所有的路都是坏的,现在你可以修路。让你找出以每个节点为首都,到达其他任意一个节点所经过的坏路不超过1条的方案数。思路:参考别人的。参考完之后又感觉思想狠简单。。。dp1[i]:以i为根的子树,满足到达这棵子树的任意节点的坏路不超过1条的方案数。dp2[i]:从该点出发,往父亲方向的满足要求的方案数。首先先看dp1。假设原创 2015-05-21 20:12:46 · 664 阅读 · 0 评论 -
codeforces 553B Kyoya and Permutation 构造+规律
题意:定义了一个序列映射,映射之后会生成一个或多个环。由于同一个序列映射可以表示生成很多种环表示,然后就定义了标准环表示法。首先先让环内最大值放在第一位(例如有环2->4->1->2,则该环为(412)。),然后每个环再根据第一位的值从小到大排序。排完序之后去掉括号,就得到一个新的序列映射。有些序列,经过上面的操作后得到的序列与原序列一样。现在题目要你求出长度为n时原创 2015-06-26 20:17:13 · 619 阅读 · 0 评论 -
codeforces 567D One-Dimensional Battle Ships (map维护)
题意:在1~n的格子里,有k艘,每艘长为a的船,并且这些船不相交且不能相邻。现在有m个射击,每个射击给你一个位置(1~n),并且不会重复。由于对方每次都说没打中,因此你想找到至少要射击几次才能证明对方说谎。若不能证明对方说谎,输出-1。思路:n个格子,船长为a,则能放(n+1)/(a+1)艘船。(由于要求不能相邻,因此a+1)。使用map来维护。map[i]:维护i原创 2015-08-06 19:52:53 · 614 阅读 · 0 评论 -
codeforces 567C Geometric Progression (map维护)
题意:略思路:枚举每个值a作为中点,使用两个map来维护a左边和右边的值的情况。code:#include using namespace std;const int N = 2e5+5;typedef long long LL;int n, k;LL a[N];map mp, mp2;void solve() { mp[a[1]]++; f原创 2015-08-06 19:40:16 · 445 阅读 · 0 评论 -
Codeforces 520E Pluses everywhere (组合+逆元+规律)
题意:有一个字符串,长度为n,都由数字组成。在其之间放k个加号,求出所有情况的和。允许有前导0.思路:翻看了别人的题解,但还是看不懂。只知道找出每个数字对最终结果的贡献,分个位、百位……于是肉鸽尝试去找规律,结果还真找到了 = =。例如3 2123个位:1 1 1 4 21234十位:1 1 1 0个位:2 2 2 3原创 2015-03-15 16:14:04 · 720 阅读 · 0 评论 -
Codeforces 558D Guess Your Way Out! II 排序、区间求交、并
题意:有一颗高为h的完整二叉树,出口在某一个叶子节点上。有n次问答,每次你问一个区间,系统都会告诉你出口是否在这个区间内。而你的任务是根据n次问答,判定出:系统作弊、出口位置、条件不足以判断出口。思路:看了很多其它的题解,最后还是感觉杰哥的思路来的简单。首先把所给的每个区间都映射到叶子节点的区间。1.求所有为真的区间,并求出它们的交集,记为a。(a为一定存在的区原创 2015-07-20 11:03:37 · 582 阅读 · 0 评论 -
Codeforces 558C Amr and Chemistry 位操作
刚刚FST掉,好明显的错误居然过了60+组。。题意:给你n个数,让你通过下面两种操作,把它们转换为同一个数。求最少的操作数。1.ai = ai*22.ai = ai/2,向下取整思路:看到乘2,除2是不是应该有点感觉。对,就是位的左右移位。因为ai对于ai,我们处理出它转换到所有其它数的最少操作数。处理过程:一开始ai,首先先执行右移,直到1e5原创 2015-07-15 01:57:47 · 716 阅读 · 0 评论 -
codeforces 555C Case of Chocolate set操作
题意:有一块n*n大小的巧克力,n思路:网上各种搜,大神们的题解都写得好简洁啊。原创 2015-07-02 15:23:50 · 819 阅读 · 0 评论 -
Codeforces 557C Arthur and Table 乱搞题
题意:如果最长长度的凳脚数量超过总凳脚数的一半,则认为这个凳子是稳定的。现在有张凳子,有n个凳脚,分别分出长度和砍掉该凳脚的费用。问你要使得凳子稳定的最小费用。思路:其实是很简单的一题。要砍当然是砍费用小的,当时没想到怎么维护前面最小费用,然后就gg了。首先根据长度排个序,然后枚举每种长度作为最长长度。枚举到当前长度时,相同长度不砍,把比当前长度大的全砍掉(这个比较原创 2015-07-02 14:38:28 · 1180 阅读 · 2 评论 -
Codeforces 555B Case of Fugitive 排序+贪心
题意:有n个岛屿放在同一个条线上,并且把每个岛的左右端点给你。然后有m条桥,每条桥都有一定的长度。现在让你把桥放在相邻两个岛之间,使得它们能够连通(桥的两端要落在两个岛屿上)。现在问你,是否存在合法方案,存在则输出方案。不存在则输出"No".思路:首先对于两两相邻的岛屿,根据端点值,我们可以处理出n-1个可放桥的长度区间。然后对于n-1个区间,根据l值进行升序排序。原创 2015-06-28 11:45:10 · 928 阅读 · 0 评论 -
codeforces 553A Kyoya and Colored Balls 组合数学
题意:有k种球,每种球有a[i]个。现在它们都放到一个袋子里,要求取出来的时候,第i种球完全取出来要在第i+1种球前面。问你有多少种取法。思路:比赛时没想出来。。。结果其实是很简单的。倒过来统计就好了。假设n = sum(a[i]);首先先看第k种球,如果先把其中一个球放到最后一个位置,那么剩下的a[k]-1个球就是随便放,则有c[n-1][a[k]-1]种放法。原创 2015-06-26 10:54:21 · 736 阅读 · 0 评论 -
codeforces 553D Nudist Beach 二分+bfs
題意:給你n个点,然后让你选出一些点,使得每个点的比率最小值尽量大,让你输出你所选的点。其中有m个点是不能选的。k条无向边,连接着点与点,保证只有一个连通块)。点x的比率= (点x的邻居,且在你所选的点集内)/(点x的所有邻居)。思路:二分、bfs二分比率(0~1).首先,我们假设所有可以选入的点都已经选进来,计算每个点的ratio,对于ratio 然后bf原创 2015-06-26 19:54:31 · 1449 阅读 · 0 评论 -
CodeForces 159D Palindrome pairs (回文子串、dp)
题意:[a,b] [x, y]为回文串,a思路:本来没什么思路的,重新做了一遍最长回文子串长度,有点想法。在求回文子串时,每当遇到一个子串是回文子串,就记录下这个回文串的左下标l和右下标r。并且用rec[i]记录以i作为左下标的回文串个数。枚举回文串,假设当前的回文串范围为[l, r],则加上左下标>=(r+1)的回文串个数。code:#includ原创 2015-02-19 22:37:02 · 544 阅读 · 0 评论 -
CodeForces 2B The least round way 数学
题意:在l~r中找到两个数,使得他们的异或值最大。思路:完全是看了题解才会,思维不行啊。。实际上是二进制,从低位至高位枚举,找l和r在二进制下不同的位置。(至于为什么这样,想一下就可以了)因为2^60>1e18,枚举0~60位即可。#include using namespace std;long long l, r;long long solve() { i原创 2015-02-20 23:53:37 · 645 阅读 · 0 评论 -
CodeForces 219C Color Stripe (贪心)
题意:用前k个大写字母,替代原来字符串的大写字母,使得两两相邻的字母不一样。要求使用最少的替代次数。思路:因为是在dp专题里看到,所以一直想dp的做法,后来实在不知道应该怎么搞。于是乎看了下别人的思路。k > 2:直接模拟枚举下去。每个位置与两旁的字母比较,相同就改,做到不与左右相同即可。(证明不会= =,应该是贪心吧)k = 2:只有两种情况,ABABA……,BA原创 2015-02-20 22:08:49 · 410 阅读 · 0 评论 -
Codeforces Round #264 (Div. 2) | ABCD
A这题简直坑,我还一直以为是一种可以买多个。题目中也没说之原创 2014-09-03 19:58:49 · 460 阅读 · 0 评论 -
codeforces 463D Gargari and Permutations
题意:思路:AC代码:原创 2014-09-03 19:54:05 · 613 阅读 · 0 评论 -
Codeforces 463C Gargari and Bishops
题意:在一个n*n的矩阵中,让你选择两个点,原创 2014-09-03 19:47:30 · 587 阅读 · 0 评论 -
codeforces 461B Appleman and Tree
题意:给你一颗树,节点思路:AC代码:原创 2014-09-03 20:39:24 · 546 阅读 · 0 评论 -
Codeforces Round #260 (Div. 1) | 前3题
第一次去div1玩,当然是很惨了。。。原创 2014-08-17 01:58:14 · 422 阅读 · 0 评论 -
cf 468B Two Sets | dfs、二分搜索
题意:思路:AC代码:原创 2014-09-22 18:20:58 · 563 阅读 · 0 评论 -
cf 469B Chat Online 暴力
题意:两个人网聊,每个人都有自己的在线时间表。让你找出它原创 2014-09-22 16:49:32 · 604 阅读 · 0 评论 -
cf 468A 24 Game 构造
题意:让你从1~n个数中g原创 2014-09-22 16:57:32 · 474 阅读 · 0 评论 -
Codeforces Round #257 (Div. 2) | 前4题
其实本该昨天就写的,拖到原创 2014-07-21 14:38:23 · 460 阅读 · 1 评论 -
Codeforces Round #256 (Div. 2) | 前4题
A:给你n个展柜,放奖杯和奖牌原创 2014-07-19 09:29:12 · 566 阅读 · 0 评论 -
codeforces 461A Appleman and Toastman
题意:略思路:贪心。既然希望尽量达到最大,原创 2014-09-03 20:05:51 · 498 阅读 · 0 评论 -
codeforces 483d Interesting Array 线段树
题意:给你区间n,m次询问原创 2014-10-27 19:45:15 · 624 阅读 · 0 评论 -
CodeForces 339C Xenia and Weights (简单dfs/dp)
题意:现有类似砝码的东西,重量在1~10。现在有一个天平,开始两边没东西,现在先往左边,再到右边,又到左边……放砝码。要求每次所放的那一边,重量总和要比另一边大。求出能满足条件的放砝码的序列。思路:简单dfs。看当前这步放这个是否满足,满足则继续dfs下去,不满足就枚举下一个。(这题也有dp的做法。后面再补)code:#include using name原创 2015-02-20 22:33:46 · 847 阅读 · 0 评论 -
codeforces 189a Cut Ribbon 水dp
最近水了好多简单dp。。题意:略思路:定义dp[i]:长度为i的布,最多能分的块数。code:#include using namespace std;const int MAXN = 1e5+5;int n;int t[3];int dp[4005];int main() { cin>>n; for(int i = 0;i < 3; i++原创 2015-02-19 21:39:00 · 543 阅读 · 0 评论