![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Codeforces
cyl纤云弄巧
To Be
展开
-
二分法的应用
题意: n个人在南北路上,每个人都有自己的速度,最大不能超过vi,问最少需要多久能集合所有人。思路:二分思想,每次判断t在n个人中是否有相交的路程范围。#include <bits/stdc++.h>using namespace std;struct point{ double x,v;}p[100005];int n;int check(double t){ double原创 2017-03-06 13:43:10 · 411 阅读 · 0 评论 -
CF C. The Values You Can Make 0-1背包 好题
0-1背包 好题题意: 有n个硬币,硬币有对应的价值,现在要挑出一些硬币组成k元,输出挑出的硬币可以组成钱的不同价值。思路: 题中问的是挑出的硬币本身可以组合成不同的价值,每一种组合可以是这些挑出的硬币子集。 如何做到利用子集?最开始我试着用一维的dp表示可以组合的钱,但是有些没有挑的硬币也被算在其中,所以需要二维dp[i][j]dp[i][j] 表示组合成i 的钱也可以可以组合成原创 2017-08-29 09:49:35 · 340 阅读 · 0 评论 -
codeforces 810 C - Do you want a date?
codeforces 810C - Do you want a date?题意: 有一个集合,其中有n个数字,这个集合有很多子集,现在规定每一个子集必须至少有两个数字,其中子集中两个数字最大的差值就是这个子集的函数值,现在求出所有子集的函数值的和,需要取模。思路: 很容易想到枚举集合中最大的值的位置,需要对元素排序,例如在i位置和j位置(i#include <iostream>#in原创 2017-10-09 18:09:34 · 311 阅读 · 0 评论 -
codeforces 810 D . Glad to see you!
D. Glad to see you!题意: 题意往往是最难的对于弱鸡来说。 简化题意如下: 有n个数字1到n,现在一个人选了k个,现在让你从k个中找出两个数字,找的方法是:询问!这便是交互问题,通过询问的方式:询问三个数字1 x y,1代表问,x、y代表你想问的两个数字,另一个人会回答真正的两个数字离x、y哪一个数字最近,离x近或者两个一样近是TAK,否则是NIE。最后输出答原创 2017-10-09 22:01:12 · 543 阅读 · 0 评论 -
Codeforces Round #411 (Div. 2) E - Ice cream coloring
E - Ice cream coloring题意: 有一棵树T,节点为1~n,现在有m种ice cream,每一个节点都有si种ice cream,现在新建一棵树G,节点为ice cream 的种类数,标号为1~m,边是否相连有如下规则: if and only if there exists a vertex in T that has both the v-th and the u原创 2017-10-11 22:19:10 · 260 阅读 · 0 评论 -
B. Mike and strings
B. Mike and strings题意: 有n个相同长度的字符串,现在问是否可以通过一种操作使得恢复成一样的字符串,若能,输出最少的次数。 操作:把当前字符串的第一个字母放到最后一个字母的后边。 n < 50. length < 50.思路: 看到数据的范围就感觉可以暴力求,但是对于字符串的题,不要急于动手打代码。 想清楚思路: 成为相同的字符串原创 2017-10-12 12:01:26 · 309 阅读 · 0 评论 -
C. Mike and gcd problem
C. Mike and gcd problem题意: 定义一种beautiful数列,满足gcd(b1,b2,···,bn) > 1. 现在给出一个数列A,有一种操作:对ai操作,使得a[i] = ap[i]-a[i+1],a[i+1] = a[i]+a[i+1] 问最少多少次操作使得题中满足beautiful。思路: 数学题就多思考,有公式的情况下向公式思考。根据操作的方法原创 2017-10-12 12:02:06 · 299 阅读 · 0 评论 -
D - Mike and distribution
D - Mike and distribution题意: 有两个数列,个数相同,现在选出不超过n/2+1个数列下标,使得在每一个数列中下标的数字之和的二倍大于原数列,输出答案和下标。思路: 题意是经过化简 的,因为题中并没有说要选择多少个下标,只是一个范围,那么最简单的做法当然是选择越多越好。 方法:思考挑选的个数,明显是大于数列个数的一半的。 先对A数列做一次排序,那么从大原创 2017-10-12 20:26:28 · 252 阅读 · 0 评论 -
C - Functions again 简单DP,需要转化
C - Functions again题意: 给出一个序列,定义一个区间函数为:求出最大的值。思路: 直接求没有办法求出,思考其公式,假如最终答案是区间l,r,其和最大,那么必然是正负正负正的形式,所以只需求出所有的正负情况,然后求出区间的最大子序列和即可。#include <iostream>#include <cstdio>#include <cstring>#include原创 2017-10-13 15:33:58 · 270 阅读 · 0 评论 -
D - Weird journey
D - Weird journey题意: n个城市,m条路,现在要找出这样的路:经过m-2条路两次,其它两条路经过一次。 问:有多少这样的路径。思路:一定要看清楚题。 根据题意发现类似于欧拉图,根据欧拉图的定义只有满足两个条件的才能画出图, 不妨把经过两次的边转化为欧拉图,根据欧拉图“一笔画”性质,可以得出肯定是相邻边,并且无论相邻节点的度是多少都能连城欧拉路,所以目的就是找出原创 2017-10-13 21:37:16 · 295 阅读 · 0 评论 -
Gym - 101522B树的直径
Gym - 101522B题意: 给出一棵树,然后按照所给出的方式建立新的边,然后可以一层层的建边直到无边可建。问需要多少个小时,每一个小时可以建立一条边,可以多线程建立。思路: 画图可以找到规律,最坏的情况是n个点是一个线性的,那么时间将是最长,根据线性找规律发现其长度与时间是以2倍递增的,每一个新的小时便可以在原来的基础上画2倍的线,所以找出最长边然后判断2的ans次方即可。#inc原创 2017-12-23 17:04:47 · 391 阅读 · 0 评论 -
Gym 101617D 线段树
Gym 101617D题意: 有一个nXn的图,由.和#组成,现在从1,1出发,每次跳最多k个格子,落点不能是#,问到(n,n)最少需要几步,如果无法到达则输出-1.注意只能向右和下走。思路: 直接bfs查询会超时,因为2000的数据会存很多点,但是如果对能到达的格子快速查找最小的步数可以用高级数据结构来完成,线段树。对于每一行和每一列用线段树维护#include <iostream原创 2017-12-15 12:48:33 · 242 阅读 · 0 评论 -
Gym 101617D dp
Gym 101617D题意: 有一个nXn的图,由.和#组成,现在从1,1出发,每次跳最多k个格子,落点不能是#,问到(n,n)最少需要几步,如果无法到达则输出-1.注意只能向右和下走。思路: 此题可以从dp方式来思考,当走到当前一步时,最重要的是判断从哪里开始,从上或者左,不妨开两个数组a和b分别记录行和列的信息:a[j]a[j] 保存当前j列中.所在的位置b[i]b[i] 表示能够到原创 2017-12-15 12:49:02 · 273 阅读 · 0 评论 -
Gym 101617J dp
Gym 101617J题意: n个金矿,每一个金矿都有一个初始值代表第一天里面所含的金子数量,每天减少di,现在从金矿1出发,问最多能获得多少金子。思路: 时间是最难解决的问题,因为时刻在变化,但是如果能够对时间做处理,那么题目就很简单了。 不妨枚举时间和前一个所在位置的状态,当时间和状态都满足的时候才可以继续走。#include <iostream>#include <cstd原创 2017-12-16 20:46:54 · 280 阅读 · 0 评论 -
Gym 101617H dfs + 离散化 + 枚举
Gym 101617H题意: 有n个房间,m个门,k个桥,每一个门只允许特殊范围编号的人通过,问从出发点s到t可以有多少人通过。思路: 读完题发现k没有什么作用。。 对于这样的题在比赛的时候并没有读,太菜!从答案来看求的人数,通过题意可以发现这必然是一个连续的区间,左右端点不知道的情况下很难暴力,也无法枚举答案,因为很难验证。 正解很巧妙,对于答案所在的区间必然是存在于某几个原创 2017-12-17 16:38:59 · 330 阅读 · 0 评论 -
codeforces C. Remembering Strings 状态压缩-预处理
状态压缩-预处理题意: 好记的字符串是n个字符串中,每一个字符串至少有一位是与众不同的。现在给你n个字符串,但是有的字符串不满足与众不同,让你修改某一个或者一些位置的字符串使得满足题意,每一个位置的修改都有对应的花费,问最少的花费是多少。思路: 之前写过的棋盘问题,条件都是直接看的到的,在进行状态压缩的时候直接可以用到条件,但这种题似乎很难直接想到如何使用条件,不妨先思考如何修改,对于一原创 2017-08-28 23:14:07 · 412 阅读 · 0 评论 -
cf 304 Soldier and Traveling 网络流 + 记录流量情况
网络流 + 记录流量情况题意: n个城市,每个城市有最初的卫兵ai,现在需要转移卫兵,第i个城市需要卫兵bi,每一个城市的卫兵可以转移到临近的城市,也就是距离为1的邻近城市,问是否可以转移到,如果可以输出YES并且输出转移情况。思路: 根据题意和城市卫兵转移的性质,可以判断是网路流问题,但是因为有转移的限制所以需要思考如何建图。根据限制,为了保证从ai状态到bi状态,把城市拆分为ai和原创 2017-08-27 16:49:14 · 272 阅读 · 0 评论 -
CF 423 C : String Reconstruction
CF 423 C : String Reconstruction题意: 有一个字符串被藏起来了,但是有个人知道有些子串出现的位置,现在让你还原这个子串尽可能的字典序小。思路: 原来我是直接暴力去模拟,对于每一个位置我不管有没有字符,反正不会矛盾所以直接添加,但是直接RE了,原来是题中说n<105n < 10^5 ,导致数组开小。。。改了数组之后TE,当时觉得是子串之间会重复,但是优化很原创 2017-08-23 16:09:56 · 287 阅读 · 0 评论 -
CF D. Kefa and Dishes (状态转移dp)
题意: 一个人去点餐从n种点出m种。每一种菜都会有一个满意度,并且他制订了k个规则 ,若a在b之前吃的话,会额外得到满意度。求出最大满意度。思路: 由于问题的规模不大(1 ≤ m ≤ n ≤ 18, 0 ≤ k ≤ n * (n - 1)),所以很明显要用到状态转移 dp,若何用呢?想到需要一个状态st表示菜的选择状态,i表示以第i种菜为结尾的最大 值,则遍历st的每一种原创 2017-04-23 18:47:37 · 423 阅读 · 0 评论 -
CF Number With The Given Amount Of Divisors
题意: 给出一个数n,求出因子的个数为n的最小的数。思路: 首先要知道反素数的概念:对于任何正整数x,起约数的个数记做g(x).例 如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0 < i < x ),都有g(i) < g(x) 则称x为 反素数 可以得出: 1. 一个反素数的因子必然是从2连续开始的,目的是为了保证约数为x的数 n最小。原创 2017-05-06 18:24:58 · 293 阅读 · 0 评论 -
codeforces D. Dynamic Problem Scoring
题意: 给出n个人5道题的codeforces提交时间,现在第一个人想要自己的成绩总和大于第二 个人,怎么强行提高自己成绩呢?他会开小号去提交某一些题目,而一道题的 Accepted之后的成绩是根据比例计算的,Accepted / 总提交。比例越小成绩越高 如题中的表。他可以在自己能力范围内控制题目的比例。求出,他需要多少个小号 去达到目的。思路: 对于第一个人,如原创 2017-05-19 21:34:11 · 337 阅读 · 0 评论 -
CodeForces - 811D D - Vladik and Favorite Game
题意: 有一个游戏,给你一个n*m的地图,让你找到‘F’所在的位置,但是没这么简单,如 果你知道从(1,1)开始走到‘F’所在的位置的话,你就输出从(1,1)到终点的 转向,分别是’R’,’L’,’D’,’U’,如果是这样的话也是很简单的,不过游戏的有趣之处也在 这里,你发送一个转向,系统会给你转向之后的坐标,不过这四个转向有可能交换, 交换也只有两种可能,现在问题就是这原创 2017-06-18 21:03:08 · 379 阅读 · 0 评论 -
codeforces C. An impassioned circulation of affection
Nadeko’s birthday is approaching! As she decorated the room for the party, a long garland of Dianthus-shaped paper pieces was placed on a prominent part of the wall. Brother Koyomi will like it!Still u原创 2017-06-11 23:51:33 · 426 阅读 · 0 评论 -
codeforces D. An overnight dance in discotheque
The crowdedness of the discotheque would never stop our friends from having fun, but a bit more spaciousness won’t hurt, will it?The discotheque can be seen as an infinite xy-plane, in which there are原创 2017-06-12 00:03:20 · 365 阅读 · 0 评论 -
Codeforces Round #417 (Div. 2) B
题意: 给出n层楼的灯的状态,要关闭所有的灯,问最少走多少步。思路: dp[i][0] 表示从左边上,dp[i][1]表示从右边上。注意点:楼梯在第一列和最后一列每次上需要加1对l和r的处理需要谨慎#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn =原创 2017-06-26 21:36:28 · 245 阅读 · 0 评论 -
Codeforces#420 C. Okabe and Boxes
C. Okabe and BoxesOkabe and Super Hacker Daru are stacking and removing boxes. There are n boxes numbered from 1 to n. Initially there are no boxes on the stack.Okabe, being a control freak, gives Daru原创 2017-06-27 22:17:28 · 568 阅读 · 1 评论 -
codeforces C. Vladik and Memorable Trip DP
题意: 有一列火车要拉人,把一群人放在不同的车厢,每一个车厢里面的人去的城市编号的 异或值和就是这列车的舒适度,问如何划分才能使得舒适度最大,输出最大值。注意:有些人的目的城市相同,则需要在同一个车厢,有些人可以不上车。思路: dp[i] 表示1~i人坐车的最大值 那么怎么找到不同的段呢?我们可以从第i个人向前找某一个段,找到一个段的时候就 比较保存在dp[i]中,其中的原创 2017-07-18 10:17:50 · 422 阅读 · 0 评论 -
#419 (Div. 2) C 思维题
思维题,多出样例,多看题意题意: 有nxm的方格,每个方格有数字gi.jg_i._j 。现在有两个操作。 对每一行的每一个数字都删除1,前提是每一个数字至少为1 对每一列的每一个数字都删除1,前提是每一个数字至少为1 经过很多上述的两种操作,如果方格里面的数字全都可以变为0,则输出最少的操作次数和操作方式 操作方式有很多种,输出一种就行。如果不能实原创 2017-07-31 23:51:52 · 219 阅读 · 0 评论 -
codeforces 280c 概率dp + dfs
概率dp + dfs题意: 有一个n个节点的树,现在有一种操作,当给一个节点染黑色的时候,其子树也会被染成黑色。问期望多少次染色之后都会被染成黑色。思路: 第一次做概率dp,理解不是很深。 对于每一个节点如果要被染色只有两种情况:1. 本身染色,2. 父亲节点染色 对于这个树,如果把其每一个节点被染色的可能加起来就是期望。对于染色的结果就是一种:黑色。所以就是1. 在概率原创 2017-08-25 09:11:20 · 284 阅读 · 0 评论 -
codeforces 423 D. High Load 构造一个思维的树
构造一个思维的树题意: 有n个节点,其中有k个特殊节点,特殊的节点只能连接一条边,其它的至少两条边。问如何连接才能使得特殊节点的最远距离最短,输出一种方案。思路: 可以看出连接时分层的,最外层只能是K个特殊节点,根据这样的性质可以直接得出最远距离,当(n-1)%k == 0的时候说明恰好有(n-1)/2层,其距离为乘以2,当有余数为1的时候∗2+1既可,其它的就是∗2+2*2 + 1既可原创 2017-08-25 09:56:48 · 268 阅读 · 0 评论 -
CF Bear and Tree Jumps树形DP
树形DP题意: 有一棵n个节点的树,现在定义一个函数:s(i,j),i<j,意义是i节点和j节点的距离。s(i,j) , i < j,意义是i节点和j节点的距离。 距离是根据一个跳的次数而定,一个人从i节点每次最多跳k次,而其跳的次数便是距离。思路: 一般在树上计算距离或者其它运算的问题,很难离开树形dp的范畴,但是关键在于如何转化问题为结果。 这里说i < j ,其实意味着i到原创 2017-08-26 10:01:54 · 297 阅读 · 0 评论 -
CF Bottles 0-1背包
0-1背包题意: 有n个瓶子,每一个瓶子有自己的容量v和最初装的水的体积。问最少使用多少瓶子可以把所有的水装起来,此前提下最少花费多少的时间倒水,一单位的水需要1单位时间。思路: 瓶子的属性和要求的最优解提示了是一个背包问题。先求出第一个问题,最少需要多少瓶子,那么可以直接根据瓶子的容量求出。关键在于如何求得第二个问题,有两种dp方式:1. dp[i][j]dp[i][j] i个瓶子原创 2017-08-26 15:05:04 · 375 阅读 · 0 评论 -
算法学习kruskal
Codeforces Round #446 (Div. 1)题意 有n个节点m条边的无向图图G,可以保证连通性。现在有q个询问,每个询问有k个边,判断是都在同一个最小生成树中,若存在则输出YES否则输出NO。样例 输入:5 71 2 21 3 22 3 12 4 13 4 13 5 24 5 242 3 43 3 4 52 1...原创 2018-07-14 22:02:22 · 307 阅读 · 0 评论