Codeforces Div. 2:C
文章平均质量分 91
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #365 (Div. 2) C. Chris and Road 实数级的二分法、几何
实数级的二分法、几何可以把问题分成2种情况第一种情况:车到线之前, 行人通过 //遍历 n 个点第二种情况:车到线之后,行人通过 //即行人等了x分钟之后, 开始过马路, 刚好可以安全通过, nlogn 二分答案 + 遍历 n 个点Y ( ^ _ ^ ) Y 实数级的二分法最开始用的 eps = 1e-6, Wrong answer on test 3然后改成 eps = 1e-9 就过了。二分部分的代码 double l =原创 2016-09-16 21:30:33 · 1333 阅读 · 0 评论 -
Codeforces Round #400 (Div. 1 + Div. 2, combined) C. Molly's Chemicals 区间和、构造、前缀的后缀
题意:给出n个数字,要求选出一段连续的数字,使它的和为k的非负整数次方,为这样的区间有多少个。区间和、构造、前缀的后缀这是一个很有趣的构造题,一个连续区间[a, b],转化为 [1, b] - [1,a-1],如果差值,满足要求则这样的区间存在,然后换过来,对于每个k^j,对于 [1,b] - k^j == [1,ax-1],有多少个前缀和sum{[1,ax-1]}就有多少个多少个区间[ax, b] == k^j次。这里可以借助map来记录 前缀和sum{[1,ax-1]} 出现的次数。此外要处理原创 2017-03-22 01:11:31 · 708 阅读 · 0 评论 -
Codeforces Round #401 (Div. 2) C. Alyona and Spreadsheet last数组、预处理、优化
题意:给出n*m个树,询问第i行到第j行是否至少有一列是非递减序列。预处理、last数组、优化用 vector<int> f[maxn],其中f[i]表示第i列的数据,然后O(n*m)的标出非递减状态结束时的点。然后用lastj[j]表示上一次处理时访问到的非递减状态结束时的点的下一个点。所以对于每个0 < i < n 预处理出ans[i]表示i为起点的存在的最长的非递减序列的长度,对于每个1 <= j <= m,扫到本次非递减状态结束的点然后刷新last[j]。克制当 last[j] > i原创 2017-02-24 23:53:16 · 604 阅读 · 0 评论 -
Codeforces Round #394 (Div. 2) C. Dasha and Password 贪心+预处理+枚举
题意:长度为n的密码必须包含至少一个字母一个数字一个非字母非数字的字符,给出n个长度为m的字符串,每个串取一个字符,要求移动最少的步数使所成的密码为合法的密码。贪心+预处理+枚举先贪心的预处理出每个字符串 v[i]的v[i].c表示移动到字母的最少步数,v[i].d表示移动到数字的最少步数,v[i].f表示移动到其它字符的最少步数。先把.c.d.f都初始化为INF,然后扫一遍字符串,如果不存在相应的请求则值依然是INF。因为n <= 50 所以显然是n^3的枚举,即枚举每一个.c.d.f要求它们来自原创 2017-02-01 12:19:59 · 864 阅读 · 0 评论 -
Codeforces Round #386 (Div. 2) C. Tram 数学、讨论
题意:从x1 出发到 x2,走路速度是t2 s/ 单位长度 ,坐车是t1 s/ 单位长度,车子在0~s间不断往返,此时车在p位置,且方向是d,(正向 d == 1,反向 d == -1) 问从x1到x2的最短时间数学、讨论此外题可以分成2大类,到达的时候是走路的则只考虑全走路,如果到达的时候是坐车则只考虑坐车,即x1到达x2所花的时间为此时p位置到最后以x1指向x2的方向经过x2时的总时间。具体分成如下6类讨论 当 x1 < x2 时 ans = (x2 - x1) * t原创 2017-01-11 01:06:29 · 743 阅读 · 0 评论 -
Codeforces Round #385 (Div. 2) C. Hongcow Builds A Nation 并查集+贪心+组合学、图论、dfs
题意:有n个点(其中有k个关键点),m条边,要求添加尽可能多的边使得k个关键点之间没有路径,问最多可以添加多少条边。并查集+贪心+组合学、图论、dfs用并查集处理这个图,相关联的点构成一颗树,然后把每棵树的结点数储存在该树的根节点上,然后开始贪心,找出k个关键点里,关键点所在树的结点个数最多的结点 maxci,然后把这个ci 以及它所关联的点 与 所有没有关键点出现的树相结合(free),形成一个连通块,这个连通块的总边数是 (free + maxcnt) * (free + maxcnt - 1)原创 2017-01-10 23:20:45 · 750 阅读 · 0 评论 -
Codeforces Round #383 (Div. 2) C. Arpa's loud Owf and Mehrdad's evil plan dfs+最小公倍数
题意:当一个人开始是另一个人结束,但这个人开始时前面那个人结束,具体还是请看题吧,哈哈dfs+最小公倍数每个人只能且必须处于一个环中,自环也是环,如果环的元素个数是奇数则这个环必须是ansi = k*cnt,如果是偶数则 ans = k * (cnt / 2);//这个是自己画图发现的规律。这题不用多想什么优化的方法,搞复杂了反而容易错(比如笔者自己 T _ T ),n <= 100,直接对于每一个点每层dfs时cnt++,直到找到 目标 find(u, v),,或者找到根节点时,或者 cnt >原创 2017-01-10 18:38:14 · 683 阅读 · 0 评论 -
Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) C. Felicity is Coming!组合学+集合
题意:给出n组数,每组gi个数,每个数属于1~m,每个数可以变化但变化前相同的数变化后依然相同,变化前不同的速变化后依然不同,且可能不变,但经过变化后每组的每种数的个数不会变化,求变化的总方案数。组合学+集合//这题是根据Codeforces的官方题解写的把1~m分成一些集合,在同一个集合里的数在各个gi里它们的个数都是相等的,比如一个集合里有x、y,则xy在所有gi里的个数是相等的,但x在2个不同的集合里的个数可能不同,但x的个数必然等于y的个数。而方案数就是这些集合元素的个数的阶乘的积。把这些数原创 2017-01-14 01:28:50 · 947 阅读 · 0 评论 -
Good Bye 2016 C. New Year and Rating 不等式+贪心、数学
题意:rating == 1900是区分各个分组的界限,给出给出n个ci 和 di,表示rating上涨了ci分(ci正为涨分负为掉分) 且当场比赛是在di分区大的,不知道起始的rating,只给出了n场连续的比赛涨分情况和所在分组,求出n场比赛之后可能的rating的最大值。不等式+贪心、数学很棒的题,l = -INF, r = INF,l 表示当前rating可能值的最小值,r表示当前rating可能值的最大值。如果当前分组是div2则r = min(r, 1899),,如果当前是div2原创 2017-01-14 00:32:54 · 1032 阅读 · 0 评论 -
Codeforces Round #382 (Div. 2) C. Tennis Championship 递推、斐波拉契数列
题意:每个人输了比赛就会被淘汰,每两个人可以打比赛的要求是a赢过x场比赛b赢过y场比赛则当abs(x - y) <= 1 时他们可以进行比赛,总共n个选手,问最终的赢家可能赢过的场次的最大值。递推、斐波拉契数列递推是很好写的,cost[i] 表示赢i场比赛需要花费多少人,则 cost[0] = 1,cost[1] = 2, cost[3] = cost[1] + cost[0], cost[ans] = cost[ans-1] + cost[ans-2]一次类推直到n不够用,ans即为答案。原来是原创 2016-11-28 03:10:45 · 1254 阅读 · 1 评论 -
Codeforces Round #404 (Div. 2) C. Anton and Fairy Tale 贪心+二分
题意:初始是n,每次放入m,然后拿走i, n' = max(n, n' + m),问i为多少的时候剩余的数为0.贪心+二分首先如果 m >= n 则ans = n;否则贪心,前m天,必定是拿完之后就重新填满的,这个时候剩余 n -= m;然后对这个新的n进行二分,找到最大的cnt,使得 (cnt + 1)*cnt / 2 <= n;然后如果最后得到的cnt,有 (cnt + 1)*cnt / 2 < n; 则还可以再拿一次,最后只有部分人可以拿到1个,cnt ++最后答案就是 ans = m原创 2017-03-16 01:29:18 · 1132 阅读 · 0 评论 -
Codeforces Round #345 (Div. 2) C. Watchmen __ map , sorting and combinatorics
Watchmen are in a danger and Doctor Manhattan together with his friend Daniel Dreiberg should warn them as soon as possible. There are n watchmen on a plane, the i-th watchman is located at point (xi, yi).They need to arrange a plan, but there are some di原创 2016-04-08 21:35:07 · 1407 阅读 · 0 评论 -
Codeforces Round #350 (Div. 2) C. Cinema __ sortings, 思维题,many data
挺好的题目,一不小心就尝试的两种不合理的做法,而且是本来认为可以但快写好了发现不对(┬_┬)最主要应该考虑的应该是从什么映射到什么会比较好,比较容易处理//!直接对 la[maxn] 用map记录, 相同language 出现的次数, 然后对每个<b, c> 进行比较原创 2016-07-09 23:40:11 · 730 阅读 · 0 评论 -
Codeforces Round #444 (Div. 2) C. Solution for Cube 枚举、模拟、魔方
题意:给出一个2*2*2的魔方的一个状态,问能不能转一下使得魔方满足每个面只有同一种颜色(1<= ai <= 6)。枚举、模拟、魔方根据题意只有2个面已经是同一种颜色,另外4个面每个面2种颜色,才可能可行可能可行。每个面按以下方式编号, 14 2 5 6 3则根据相同的面是1与3或者2与6或者4与5进行讨论。然后对于每种情况讨论转的方向(顺时针或者逆时针),耐心的慢慢写,慢慢模拟就行。详情请见代码。原创 2018-01-14 12:35:33 · 514 阅读 · 0 评论 -
Codeforces Hello 2018 C. Party Lemonade 贪心、优先队列
题意:有n种饮料,每种的一份 2^(i-1)升花费ci 卢布,要求总共买L升,花最少的钱,求出最小的花费。贪心、优先队列、乱搞首先把饮料的单价(ci / 2^(i-1))和标号(i)丢如小根堆,然后维护ans = 0 为已购买的饮料的最小花费, resL = L 表示剩余需要购买的饮料, precost = 9e18表示剩下的直接买一份(买的那份可能比resL多)时的最小花费。每次取出堆顶,此时的饮料是最廉价的,如果每份的容量大于剩余的,则刷新precost,此时如果 ans被刷新过,则 prec原创 2018-01-13 17:13:14 · 744 阅读 · 0 评论 -
Codeforces Round #449 (Div. 2) Codeforces Round #449 (Div. 2) 二叉树、回溯、分类讨论
题意:用一个前缀s1,中间部分s2,后缀s3,fi = s1 + fi-1 + s2 + fi-1 + s3来构造字符串 fi,q个询问(n, k),每次询问第n个字符串的第k个字符。二叉树、回溯、分类讨论这样构造出的字符串相当于一颗二叉树,从叶子开始回溯,回溯的时候根据k的情况,判断是从左子树向根回溯,还是从右子树向根回溯。有点想主席树的一些操作,先预处理出fi的长度,然后每次对于k和当前fi的情况,回溯到i-1,回溯的时候 如果是左边 k -= 34(前缀),如果是右边 k -= 34(前缀)原创 2017-12-03 15:34:45 · 473 阅读 · 0 评论 -
Codeforces Round #426 (Div. 2) C. The Meaningless Game C. The Meaningless Game
题意:给出n(1 <= n <= 3.5e5)个询问,每个询问给出a、b(1 <= a, b <= 1e9),A和B 2个人每一轮选择一个数K,如果A先说出就a' * k^2 且B :b'*K。反之a'*K , b'* K^2, 经过x轮后游戏结束,A最终得分a分,B最中得分为b分(x >= 0),问得到的a,b是否合理,即是否存在一系列游戏情况使得最终得到a和b值。数论、推公式、分解因数a和b初始为1,然后每次一个*k 另一个*K^2,所以最终的结果是a*b = (kk)^3, 其中kk为所以ki的乘原创 2017-07-31 13:55:54 · 1147 阅读 · 0 评论 -
Codeforces Round #420 (Div. 2) C. Okabe and Boxes 栈+last标记+贪心
题意:有1~n这n个数,给出一个stack的push和pop的序列,要求在执行的过程中用尽可能少的重排次数,使得能够使pop的顺序是1~n的顺序。栈+last标记+贪心1~2*n个操作,用一个last标记最近一次重排的位置,初始为last = 0。然后用一个栈表示上一次重排后push如的元素的栈结构。每次remove,如果当前需要pop的cnt == top则直接从stack pop掉,否则,如果栈空,且mp[cnt]出现的位置在last之前,则可以直接pop, 不然则需要一原创 2017-06-26 19:38:08 · 878 阅读 · 0 评论 -
Codeforces Round #408 (Div. 2) C. Bank Hacking 无根树、贪心、枚举
题意:有一棵无根树,上面每个节点都有一个权值,可以任意选择一个节点删除,但这是和它相邻的节点即隔一个点间接相邻的点 的权值都会增加1,求把所有的点都依次删除,中途会遇到的最大权值点的 最小权值。无根树、贪心、枚举其实选定一个根时,根的权值是本身val[i],根的子节点的权值是val[i]+1,其它节点的权值是 val[i]+2,这个时候只要枚举根和这个根的直接子节点,即可求出答案。其中取出的这些节点放在priority_queue1里剩余的其它节点放在priority——queue2里,这样就可以快原创 2017-04-13 19:36:27 · 1121 阅读 · 0 评论 -
Codeforces Round #409 (Div. 2) C. Voltage Keepsake 二分
题意:每个设备初始电量为bi,每秒消耗ai,然后充电器每秒可以给一个设备充电p,问所有设备同时工作的最长时长。二分很显然的要用二分来做,然后check函数该怎么写呢?这里题目中说 You can switch which device is charging at any arbitrary unit of time (including real numbers) ,这就表示可以整体处理,也就是说,首先把设备按照只用初始电量的工作时间(real number)排序,然后对于每个mid 进行che原创 2017-04-17 23:14:43 · 1033 阅读 · 0 评论 -
Codeforces Round #402 (Div. 2) C. Dishonest Sellers 贪心、排序
题意:给个物品有2个权值ai和bi,要求至少选k个ai,然后求最小的权值和。贪心、排序v[i].diat = v[i].a - v[i].b; 故这个表示ai和bi的差值,差值越小越应当被选取(可以是负数),所以对v[i].diat进行排序,然后选上前k个的ai,然后对于剩下的n-k个物品,如果diat值为负数则选ai,否则选bi。复杂度 O(nlogn)原创 2017-02-26 21:32:24 · 1031 阅读 · 0 评论 -
Codeforces Round #375 (Div. 2) C. Polycarp at the Radio 贪心+排序
贪心+排序刚开始的时候理解题意错了,以为最小值尽可能大,最大值尽可能小,但其实是中间贪心的过程中把最大值的 cnt[m-1].b的乐队变成最小值的乐队 cnt[0].b,直到 cnt[0].cnt 达到 n / m 就是最大的那个最小值了,而bj 的最大值不用再压缩了。即 val[i].b 表示乐队编号, val[i].cnt 表示该乐队当前表演songs的数量while(最小值 < int(n / m)){ 如果 大于m的 v[j] 还有则把这个v[j] 变成 当前最小值的乐队 val[0].原创 2016-10-16 11:32:51 · 910 阅读 · 0 评论 -
Codeforces Round #381 (Div. 2) C. Alyona and mex 贪心+构造
题意:给出一系列的区间,每个区间有一个mex值(区间内最小的没有出现过的值),然后要求min{mex} 尽可能的大。构造出这个序列贪心+构造根据题意可知,影响答案的是最小的那个区间的mex,比如最小的区间是 3 6则 0 1 2 3 ,mex = 4;比这个大的区间没有影响,填上 0 1 2 3 不断循环即可,可以直接用2个变量 l、r 维护即可找出这个区间(下面代码用的是小根堆,是本来用另外的做法做的,改的时候就不把O(nlogn)改成O(n)求得最小区间了)ans = r - l + 1;原创 2016-11-27 16:57:52 · 795 阅读 · 0 评论 -
Codeforces Round #299 (Div. 2) C. Tavas and Karafs 二分搜索+数列
题意:每个萝卜长度为 hi = a + (i - 1) * b,然后每次询问是每次操作最多把 m 个不同的未吃完的萝卜每个咬掉1单位长度,最多 t 次操作,其中求最大的r,是的[l......r]访问内的萝卜被这 t,m的操作吃完二分搜索+数列首先r必须且只要满足2个条件即可,1)a + (r - 1) * b <= t,2) sum{hi | l <= i <= r } <= t * m所以对于每个询问进行一次二分搜索即可。suml = (2 * a + ((l - 1) - 1) * b) *原创 2016-11-21 23:54:47 · 750 阅读 · 0 评论 -
Codeforces Round #372 (Div. 2) C. Plus and Square Root 数论、方程、化简、推公式
数论、方程、化简、推公式首先 当前 在 level i, res是当前屏幕上的数,i+1是目标, k是答案则有 res + k * i = (i + 1) * (i + 1) * x *xk * i = (i + 1) * (i + 1) * x *x - res;这样要O(n^2)了显然不行k=( (i + 1) * (i + 1) * x *x - res ) / i;后来 发现 res 可以被 i 整除的, 然后就想把 i 放进去k = (i + 1) * (i + 1) * x *x原创 2016-09-23 19:07:11 · 1560 阅读 · 0 评论 -
Codeforces Round #362 (Div. 2) C. Lorenzo Von Matterhorn LCA(最近公共祖先)
LCA(最近公共祖先) 在有根树中,找出某两个结点u和v最近的公共祖先(或者说,离树根最远的公共祖先)。类似于这样来访问 ......每次修改的时候直接修改就行1e18 -> 2^63次所以每次 2*63*q == 1e5 复杂度 O(2*63*n)此外对于 map<pair<LL, LL>, LL> mpt;//map tree和 map<LL, map<LL, LL> > mpt;//map tree前面用 Codeforces上的数据做了测试, 这两种写法时间上是差不多的, 然而在空间原创 2016-08-23 23:29:01 · 1255 阅读 · 1 评论 -
Codeforces Round #369 (Div. 2) C. Coloring Trees 数位dp,好题
数位dp, 好题状态定义 dp i j k 为 当前在 从左往右 第 i 位, 且 以 j 结尾, 已经有 k 个片段初始化 dp[ i ][ j ][ k ] = INF边界 if(i == 1) ......状态转移方程 if(val[ i ] == 0) dp[ i ][ j ][ k ] = min(dp[ i ][ j ][ k ], dp[ i - 1 ][ x ][ k - 1] + p[ i ][ j ]); // x = 1 ~ m, x != j原创 2016-09-06 18:25:34 · 924 阅读 · 0 评论 -
AIM Tech Round 3 (Div. 2) C. Letters Cyclic Shift 贪心、字典序
贪心、字典序必须改一个子串使得得到的新串字典序最小所以从左往右改第一个不是a的, 然后连着的都要改直到碰到一个a为止但是exactly one non-empty substring 所以全是a的时候也要改, 把最后一个a改成 z原创 2016-08-26 23:26:10 · 932 阅读 · 0 评论 -
Codeforces Round #371 (Div. 2) C. Sonya and Queries 压位、二进制来状态压缩
压位、二进制来状态压缩根据 ai的各个digit的奇偶可以把它状态压缩到一个 Ind比如 Ind = 0;然后最右边以为是 奇数 则 Ind += pow2[0];如果是 右边第二位是奇数则 再 Ind += pow2[1]如果是偶数则先对应的二进制是0,所以不要 更新 Ind这样 对于 每个 ai 都唯一对应一个 Ind而且 ai < 1e18, 所以最多18个二进制位就可以存放所有状态, Ind <= 2^18; 1、'+' 的时候, ans[Ind]++;2、‘-’ 的时候, an原创 2016-09-16 03:18:32 · 1209 阅读 · 0 评论 -
Codeforces Round #340 (Div. 2) C. Watering Flowers 计算几何、圆和点
O(n)的预处理出所有点到到那个圆心的距离,val[i].r1 val[i].r2;然后 对于每个val[i]. r1 扫一遍 val[j], 当 val[j].r1 > r1 的时候 更新 r2 = max(r2, val[j].r2); 就像这个图然后对应每个i, 更新一次ans, ans = min(ans, r1 + r2);然后就是可能会都是只用到一个圆心,所以在放一个点 val[n].r1 = 0; val[n].r2 = 0)进去(val[n]), 所以从 0 到 n 考虑 n +原创 2016-09-01 01:23:15 · 1104 阅读 · 0 评论 -
Codeforces Round #366 (Div. 2) C. Thor 数据结构、队列优化
数据结构、队列优化queue<pair<int, int> > que; //用来存放应该 操作3 后 剩余的通知queue<int> v[maxn]; //v[i]用来存放,剩余的未读的应用 i 的通知 所有通知 在que里入队一次出队一次, 在v[maxn]里入队一次出队一次, 总复杂度 2*n, 所以复杂度 O(n)此外 这里输出的东西 比较多, 用 cout << cnt << endl; 的运行时间 大约 是 cout <<原创 2016-09-12 13:35:31 · 1249 阅读 · 0 评论 -
Codeforces Round #367 (Div. 2) C. Hard problem 朴素dp、线性dp
状态定义:LL dp[maxn][2]; dp[i][0] 表示前 i 个字符串 按字典序排列, 且第 i 个字符串不翻转 的 最小花费dp[i][1] 表示前 i 个字符串 按字典序排列, 且第 i 个字符串翻转 的 最小花费初始化: dp[i][0] = dp[i][1] = INF边界: i == 0, dp[i][0] = 0, dp[i][1] = c[i];状态转移方程: if(dp[i - 1][0] != INF) if(s[i] >= s[i - 1]) dp[i][0原创 2016-09-09 02:00:51 · 841 阅读 · 0 评论 -
Codeforces Round #353 (Div. 2) C. Money Transfers 环、贪心、前缀和推广、好题
首先最多是ans = n-1次,这个时候只有sum总是0;否则, 只有 有一个小区间是 0, 则ans就少1次;所以要找到,尽可能多的sum == 0 的区间。当时一直不知道,环该怎么处理,结束了,后来才想明白, 环不没有影响, 可以把 j ~ n 和 1 ~ i 这个设定为最后一个sum为0的区间,所以找 1 <= i <= j <= n 内的尽可能多的sum == 0的区间就好。环就是两种情况,j~n和1~i分别是两个最短的sum==0的区间;或者j~n和1~i一起组成了一个sum==0的原创 2016-05-17 20:03:19 · 1915 阅读 · 1 评论 -
Codeforces Round #364 (Div. 2) C. They Are Everywhere __ two pointers or binary search
two pointers or binary search1、binary searchint l = 0, r = n;while(l + 1 < r){ x = (l + r) >> 1; if(check(x)) r = x; //O(n)的检查 sz = x 时是否满足条件, 如果满足则 r = x, 然后继续检查x更小的情况, 最后 ans == x; else l = x;}复杂度 O(nlogn)2、two pointers用 sz 维护区间内的种类数 //原创 2016-09-25 22:21:47 · 1204 阅读 · 1 评论 -
Codeforces Round #376 (Div. 2) C. Socks 并查集+贪心、图论
并查集+贪心、图论在读入的时候直接把有边相连的点维护到一个集合里,最后对于处理出的森林,可以用map<int, map<int, int> > mp;维护,即mp[i][j]表示以 i 为根的树上颜色 j 出现的次数,然后对于每颗树,找出树上出现的次数最多的结点颜色相同的颜色, ans += (该树的总结点数) - 出现的次数最多的结点颜色相同的颜色的结点个数复杂度 O(n)原创 2016-10-22 12:31:39 · 1151 阅读 · 0 评论 -
Codeforces Round #373 (Div. 2) C. Efim and Strange Grade 贪心、实数字符串"a.b"处理
贪心、实数字符串"a.b"处理每次可以任选择一位进行四舍五入,求中间所有过程中出现的最大的数字。所以选 '.'右边的第一个 s[i] > '4'的位置,往左进行四舍五入,本次一旦停止了,如果当前位置 s[j] <= '4', 则break;当前的 s 就是答案了;否则继续往左四舍五入。对于 '.'右边没有 s[i] > '4' 则s本身直接就是答案了此外 对于 999.99999这样的数字有特殊的处理 四舍五入是 从右往左,当 s[i] == '9' 且 i == 0 时 s = '1' + s;原创 2016-09-28 02:40:42 · 1533 阅读 · 0 评论 -
Codeforces Round #380 (Div. 2) C. Road to Cinema 预处理+二重二分法+贪心
题意:从出发点0到目标点s,经过k个加油站,每个加油站可以在瞬间把车子的油箱加油加满,然后有n辆车子可以选择,每辆车有两个属性c、v分别表示花费、油箱容量,此外如果车慢速行驶,则每km耗油1升花时间2mins;如果高速行驶,则每km耗油2升花时间一分钟。求能够在 t 内从0到达s的情况下的最小花费。预处理+二重二分法+贪心把所有的车根据花费为第一优先级升序以容量为第二优先级降序排列然后预处理,使得,排在后面的车子的油箱容量必然大于等于前面的车子的容量,即把那些花费多但油箱容量小的车去掉。扫完后排个原创 2016-11-20 21:36:10 · 792 阅读 · 0 评论 -
Technocup 2017 - Elimination Round 1 (Rated for Div. 2) C. Guess the Array 交互题+解n元方程组
题意:交互题+解n元方程组交互题+解n元方程组首先询问? 1 2? 2 3? 1 3然后 x1 + x2 == x12 1) x2 + x3 == x23 2) x3 + x1 == x13 3)1) - 2) + 3)可得2*x1,从而分别求出 x1 = (x12 - x23 + x13) / 2;然后令 res = x1; //res表示前一个数的值。然后一次根据 x[i] = x[i-1][i] - res;原创 2016-11-20 14:43:01 · 747 阅读 · 0 评论 -
Codeforces Round #378 (Div. 2) C. Epidemic in Monstropolis 贪心+构造
题意:n个数构成的序列a,大的数可以合并掉小的数从而总数减1,然后给出一个由k个数构成的新序列b,问能否通过a中·部分大数逐步合并相邻相对较小的数 而得到b 贪心+构造对于每一个bi,从a[ l ] 向右扫, 找出一个区间 sum{a[l.....r]} == bi,(l < r) //没有出现==,而直接出现了 > bi,则直接ans = false; break;然后这个区间 a[l......r] 就会大的数合并相邻的小的数,最终得到bi //贪心策略是找到该期间最大的可以合并原创 2016-11-13 23:51:24 · 861 阅读 · 0 评论 -
Codeforces Round #379 (Div. 2) C. Anton and Making Potions 前缀最小值+贪心+二分搜索
题意:要合成n瓶要,合成每瓶药水需要的初始时间是x,并且总可以使用的法力值是s,然后有2种Spells,其中一种是可以把每瓶要的时间从x变成ai,并消耗bi点法力值;另一种是可以瞬间生成ci瓶药水,并消耗di点法力值,且ci、di是非递减的。这2种Spells分别每种最多使用其中的一个Spell。求配置这些药水需要消耗的最短的时间。前缀最小值+贪心+二分搜索先预处理出前缀最小值,及先把ab按照b优先升序排列,a为第二优先级,然后预处理以后 ab[i].a表示 消耗法力值<= ab[i].b是所能达到的最原创 2016-11-16 21:14:15 · 1002 阅读 · 0 评论