• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






Storm_Spirit

不忘初心,方得始终。
 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理

随笔分类 -  基础算法

 
UVALive 5052 Genome Evolution ——(xjbg)
摘要:本以为这题n=3000,随便n方一下就能过。于是我先枚举长度len再枚举起点,不断增加新的点并删除原来的点,判断在b中的r-l+1是不是等于len即可,这个过程显然要用set维护比较方便,但是貌似卡了这个log,T了= =。 然后修改了一下思路,先枚举左端点,再不断的向有扩张,并用两个变量l和r来标 阅读全文
posted @ 2017-04-13 12:57 Storm_Spirit 阅读(223) 评论(0) 推荐(0)
UVALive 4254 Processor ——(二分+优先队列处理)
摘要:题目是求最小化最大值,很显然是二分,但是二分以后怎么判断mid是否可行并不容易。 代码参考了网上一个博客的代码。巧妙之处在于一秒一秒的考虑,这样可以把处理速度mid直接转化成1秒内实际的量来解决(避免小数问题),然后贪心考虑每次处理最早结束的工作即可。注意我这里的代码t表示的是一整秒,譬如[1,2] 阅读全文
posted @ 2017-03-13 17:42 Storm_Spirit 阅读(150) 评论(0) 推荐(0)
2015 Syrian Private Universities Collegiate Programming Contest
摘要:题目链接:https://vjudge.net/contest/152219#overview。 水题较多。就贴一下当时没做出来的几题好了。 D,方法很简单,当时没想出来。用pos[x]表示x这个数已经是递增序列的第几个了,那么每次输入一个数x,令pos[x] = pos[x-1] + 1并更新答案 阅读全文
posted @ 2017-03-01 19:35 Storm_Spirit 阅读(151) 评论(0) 推荐(0)
Codeforces Round #402 (Div. 2)
摘要:现场打的,出3题,被rejudge掉B题= =。 A题,水题,两边数量不一样的总和除以4即可。 B题,写挫了,结果少了一个特判。 C题,水题。直接贪心即可。 D题,比赛时没做出来= =。判断b串是a串的子序列是线性的,那么二分答案即可。 阅读全文
posted @ 2017-02-26 22:43 Storm_Spirit 阅读(78) 评论(0) 推荐(0)
BestCoder Round #92
摘要:现场赛就出了一题= =。 A题,水题。但是几天没写代码有点手生,调试了一会才A= =。 B题,考虑到只要连续的四个即可,那么枚举中间的两个即可。代码如下: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 #inc 阅读全文
posted @ 2017-02-26 15:42 Storm_Spirit 阅读(115) 评论(0) 推荐(0)
Codeforces Round #366 (Div. 2)
摘要:A题,水题。 B题,博弈论题,找到的规律是当前数是奇数那么这个子游戏是必败的,否则必胜。那么异或一下即可。 C题,模拟题,考虑到第三个操作如果之前清空到第x条,且当前清空到第t条,如果t比x要小,那么可以忽略清空到t条的操作;另外所有元素最多入队列和出队列一次。那么总的复杂度是O(n)的。代码如下: 阅读全文
posted @ 2017-02-11 10:57 Storm_Spirit 阅读(101) 评论(0) 推荐(0)
Codeforces Round #394 (Div. 2)
摘要:A题,水题,但是需要特判"0 0"因为至少至少走了一格= =。 B题,水题,但是补题的时候n=1的情况没考虑(或者说写挫了)导致WA了一发。 C题,数据小,可以直接暴力,用3个数组分别储存每一行变成3种类型的字符需要移动的最少位置。然后三个for来暴力枚举分别由这3行提供3种字符,更新答案即可。代码 阅读全文
posted @ 2017-02-04 16:20 Storm_Spirit 阅读(105) 评论(0) 推荐(0)
Codeforces Round #382 (Div. 2)
摘要:A题,水题。 B题,贪心一发。排序一下,从大到小,先拿个数较少的几个,再拿个数较多的几个即可。证明应该是显而易见的。 C题,本以为log一发即可。但是log的话不能保证深度最深,即不能保证最大分数最大。因此考虑递推,用f[i]表示要得到i分需要的最少的人数,显然要人数最少,最后剩下一个即可。那么要得 阅读全文
posted @ 2017-02-02 18:38 Storm_Spirit 阅读(112) 评论(0) 推荐(0)
Codeforces Round #392 (Div. 2)
摘要:突然觉得CF的题很锻炼代码能力和反应速度。。更加坚定了我在寒假要多打CF的决心。 AB都是大水题,直接跳过了。 C题,很简单的题目,不过感觉细节必须考虑清楚。WA了很多发才过,而且最终代码还很挫。。还特判了n是1和2的情况= =。。代码太挫了就不贴了。 D题,也是比较简单的贪心,不过感觉直接写for 阅读全文
posted @ 2017-01-23 23:11 Storm_Spirit 阅读(122) 评论(0) 推荐(0)
UVA 11853 Paintball ——(dfs+圆交判定)
摘要:题意:给出一个1000*1000大小的矩阵,里面有若干圆,表示障碍物,现在要找出从左边到右边的一条通路,输出入口和出口的坐标,如果有多答案,输出y值最大的答案。 分析:从与上面相连的圆开始dfs,每次找与之相交的圆作为dfs的路径,如果能访问到下面,那么左边和右边肯定是不连通的;否则,连通。并且在d 阅读全文
posted @ 2017-01-15 08:20 Storm_Spirit 阅读(179) 评论(0) 推荐(0)
CodeForces Good Bye 2016
摘要:A题,水题略过。 B题,也水,但是想复杂了。只要运动超出[0,20000]的范围就算不可能了。 C题,我自己的方法是解不等式,然后取最大的答案即可。代码如下: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 #i 阅读全文
posted @ 2017-01-12 16:03 Storm_Spirit 阅读(149) 评论(0) 推荐(0)
zstuoj 4243 牛吃草 ——(二分+两圆交)
摘要:这题上次补了以后忘记写博客了,现在补一下。 有两个注意点,第一是两圆相交的模板。可以通过任意一种情况手推出来。 第二是,实数二分要注意不用ans记录为妙,因为可能因为eps过小,导致ans无法进入记录答案的语句中(ans过大可能又会有误差),直接用一个l或者r记录一下即可。 代码如下: 阅读全文
posted @ 2016-12-30 17:04 Storm_Spirit 阅读(226) 评论(0) 推荐(0)
codeforces 742D Arpa's weak amphitheater and Mehrdad's valuable Hoses ——(01背包变形)
摘要:题意:给你若干个集合,每个集合内的物品要么选任意一个,要么所有都选,求最后在背包能容纳的范围下最大的价值。 分析:对于每个并查集,从上到下滚动维护即可,其实就是一个01背包= =。 代码如下: 阅读全文
posted @ 2016-12-17 15:32 Storm_Spirit 阅读(245) 评论(0) 推荐(0)
HDU 5410 CRB and His Birthday ——(完全背包变形)
摘要:对于每个物品,如果购买,价值为A[i]*x+B[i]的背包问题。 先写了一发是WA的= =。代码如下: 正解是,先跑一遍价值为A[i]+B[i]的01背包,再跑一遍价值为A[i]完全背包。所以上面的代码错了大概是因为,这两个背包的第二个for的方向是不同的,没办法一起跑吧(除非用另外一组变量记录下到 阅读全文
posted @ 2016-12-16 19:31 Storm_Spirit 阅读(213) 评论(0) 推荐(0)
CodeForces 675C Money Transfers(贪心+奥义维护)
摘要:题意:n个银行。 其中存款有+有-。 总和为0。 n个银行两两相邻((1,n),(1,2)...(n-1,n)); 问最少移动几次(只能相邻移动)能把所有数变为0。 分析:思路很简单,起始答案算它为n,然后每存在一段,这段的和为0(包括就一个0的情况),这个答案就减1。如1 2 3 -6,只有一段, 阅读全文
posted @ 2016-10-15 10:53 Storm_Spirit 阅读(156) 评论(0) 推荐(0)
CodeForces 722D Generating Sets
摘要:题意:如果你有一个原数列的话你可以对任何一个数字进行操作,令这个数字乘2或者乘2后在加1。现在给你一个目标数列,让你求一个原数列,这个原数列是所有可能的原数列当中最大的一个元素最小的那种。注意原数列和目标数列都必须满足set内元素的性质(即每个元素都不相同),但是在变化的过程中不需要满足这个条件。 阅读全文
posted @ 2016-10-02 09:46 Storm_Spirit 阅读(296) 评论(0) 推荐(0)
CodeForces 721D Maxim and Array
摘要:题意:给出n个数,k次机会,每次机会可以使得任意一个数字减少或者加上x,问使得最后的乘积最小的n个数,每个数是多少。 分析:贪心思路是每次取出绝对值最小的一个数,判断乘积的符号以及这个数的符号来做出加或者减的操作。 具体见代码: 顺便回顾一下,优先队列是默认的每次弹出优先级最大的元素(默认less) 阅读全文
posted @ 2016-10-01 09:13 Storm_Spirit 阅读(393) 评论(0) 推荐(0)
CodeForces 535C Tavas and Karafs —— 二分
摘要:题意:给出一个无限长度的等差数列(递增),每次可以让从l开始的m个减少1,如果某个位置已经是0了,那么可以顺延到下一位减少1,这样的操作最多t次,问t次操作以后从l开始的最长0序列的最大右边界r是多少。 分析:由题意可以挖掘出两个条件:l~r中最大的值(因为是递增的,即r的值)必定不大于t;同时,t 阅读全文
posted @ 2016-07-09 09:22 Storm_Spirit 阅读(219) 评论(0) 推荐(0)