自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(154)
  • 收藏
  • 关注

原创 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛

五题菜狗… 那个自习室真是有毒..坐了一下子马上就感冒了..头痛…A Wasserstein Distance这题也是搞不懂,一开始狂wa,迷迷糊糊的.#include <iostream>#include <vector>#include <set>using namespace std;#define debug(x) std::cer...

2018-04-15 20:09:09 429

原创 cf Mahmoud and Ehab and another array construction task(素数处理大乱炖)

做惯了素数分解,其实直接因数分解,复杂度也是根号的,这非常有用. 筛是线性的,这也非常重要. 给出一段数,让你给出一个字典序大于他的最小数列.这种最小的大于..不是特别的东西. 每一个数放进来,素因数分解,如果和之前数没有重合,那么把他的新素因数都过一遍. 如果有了重合,那么就不行了. 这题说不出什么,感觉就是筛法的重现.搞不太清楚.#include <iostream>...

2018-04-09 23:38:02 232

原创 找不到bug...

include include using namespace std;define debug(x) //std::cerr << #x << ” = ” << (x) << std::endltypedef long long LL; const int MAXN = 1e5+17; int a[MAXN]; int...

2018-04-09 09:26:18 336

原创 cf Castle Defense(二分+滑动窗口)

类似区间覆盖的问题,每个弓箭手可以给半径r的区域加防御力,有一些弓箭手未被部署,问你怎么部署可以使得防御力最小值最大. 当然想到是二分,但是二分之后我一开始想的是用树状数组来获得区间和,判断行不行,(一旦不行就给最左边的加这是很容易想到的).然而t了…我优化了好久,最后发现,有且只有最后一组过不了,并且答案已经显示出来了… 然后想到用滑动窗口来判断当前区间和…这个就容易很多.. 然而发现并没...

2018-03-26 16:07:02 250

原创 atcoder Grid Components(构造)

要你构造一个指定联通块数量的黑白图,具体构造方案类似一个一层一层的塔,可以跑一遍程序看.有一些细节要处理,没什么意思.#include <iostream>#include <algorithm>#include <cmath>#include <vector>using namespace std;#define debug(x)...

2018-03-26 13:52:21 322

原创 cf Water Taps

n个水龙头,每个有温度,和他的最大出水量,混合后的温度为出水量乘温度/总水量. 问你要获得目标温度,最多放多少水. 一开始总想着..某种数学方式解决,然后失败… 后来想着应该是二分吧,但是我总是想着 logn * n的方式来直接check答案,但是事实上是n*logn的,首先.是一个贪心的做法(贪心的做法很多都是先无脑放入,然后抠出来),把所有水龙头都拉满,然后这时显然温度会不平衡,那我们就...

2018-03-26 10:17:46 240

原创 atcoder Two Sequences(位处理)

每一位分开处理,希望可以获得所有异或的值中该位的情况. 一开始想用dp的方式,后来发现进位会使得无法处理. 所以直接用求和的方式来判断该位是否存在. 这里的方法是对所有取模,并排序,就可以用二分得到数量. 具体参看官方题解.还是很妙的.#include <iostream>#include <algorithm>#include <vector&g...

2018-03-24 13:44:22 282

原创 最近

其实这篇博客早该发了,只是这两天要不卡题,要不太晚了累.. 一开始的兴奋冲淡了吧,我远远不够,仍然没有做出一题有价值的题,刚好当时的题目,使用stl乱搞是方便的,我刚好手比较熟,所以取得了优势,但是现在的我,仍然没有任何上限的提升. 并没有....

2018-03-22 23:28:00 116

原创 cf Directed Roads

这题和我上一篇博客有着惊人的相似.. 同样的陈述,只是每个指向变成了有向的,问你选择一些边来翻转,如果翻转之后不存在环,那就是可行的,这种可行方式有多少种. 我们反向考虑,翻转后会存在环的方式有多少种,按照上一篇博客的方法,进行剥离,这里不存在”完美树”只有2,3.这里,因为有向环的定义,2也被认定为一种特殊的环. 这题在组合上的计算是容易的. 发现了这个图的性质,按照之前做法即可.#...

2018-03-22 23:25:30 132

原创 cf Fix a Tree

每个点,跟一个点一定连边(有可能是他本身),当然,这样给出的一组数据,不一定是一颗完美的树(有且只有一个点是连他本身,当然不存在环),要你进行最少的修改,使其变成一个树. 首先,这显然是一个类似森林的定义,我们可以dfs出一个联通块,然后对他的性质进行判定 1.一旦出现一个点指向自己,那这一块一定是一颗正常树. 2.一旦出现一个点指向的那个点指向的是他自己(互相指向),那他是一棵树,只是存在...

2018-03-22 23:20:29 132

原创 Reverse and Compare(dp)

给出一个字符串,让你翻转一次某一个区间,问你一共能得到多少种不同结果. 一开始想着跟回文串有关系,但是只是剪去回文串还是有多的,就是一个翻转区间哪怕不是完全回文,只是两端相同,也仍然会被重复计算.然后就很绝望,想要枚举统计所有字符的距离出现次数,发现不可行. 根据我做的一点点atcoder题目就猜是dp,果然,很裸.T^T dp[i]前i个字符可以获得的不同结果数量,那么在每加一个字符时,先...

2018-03-14 19:39:01 204

原创 Unplanned Queries(猜)

又是猜的..但是看了题解,有一些地方还是可以的. 是否存在一棵树,满足所有边都被走过偶数次. 给出所有需要走的路的头尾. 这题关键在于,树上两点想要走通,一种是不走根,直接互联(当然有的只能走根),第二种是走根(当然在很多时候这是浪费的),我们只关心奇偶性的情况下,这两者等价. 那么好了,我们可以把所有路线,都变为过根的次数. 我这里用的是以1点为根,树为一条链的直接计算,其实是一样的....

2018-03-14 15:21:40 165

原创 Hamiltonish Path(模拟)

这题吧..真的一点思路都没有,不知道从何下手.. 看了题解,只是简单的一步步满足下去,似乎并没有什么思维量,原因也只是因为一定有解,这就让人很痛苦了… 假定两个端点,一个端点不行,就换成他连接的某点做端点. 第一次用deque#include <iostream>#include <queue>#include <vector>using n...

2018-03-14 14:39:58 263

原创 Codeforces Round #470 Div. 2 D Perfect Security(字典树求异或最小 唯一)

给出一些数a[i],和一些数b[i],要你把a[i]中的数,依次找到b[i]中的某个数进行异或,使得越前的a,得到的值越小即可,但是b的数只能用一次. 显然是用字典树,在插入的过程中,每个数在他的路径上标记,那么在他被选中的时候,删去标记,就可以了.#include <iostream>#include <cmath>#include <cstring&...

2018-03-12 15:04:26 245

原创 cf round 470 b Primal Sport

好菜啊..这种数学题,基本只能靠猜.. 猜了猜,打了打表,苟过了…#include <iostream>#include <cmath>#include <cstring>#include <algorithm>using namespace std;#define debug(x) std::cerr << #x &...

2018-03-12 10:44:50 336

原创 cf round 470 c

每天生产一堆雪,每天有一个温度,所有雪会融化该温度的体积. 问你每天融化多少雪. 每天,把当天的雪,当作是第一天就已经存在的雪放入multiset,然后遍历,如果包括上这一天及之前的所有温度和都不能满足的雪体积,是需要在今天融化完毕的,直接erase掉.其他的,就可以承受今天的融化量,直接乘以数量即可.#include <iostream>#include <set...

2018-03-12 09:36:24 110

原创 差分

差分..好厉害的名词,其实听过几次,但是一直没什么感觉,就目前见过几次来说的话,就是一个数组,存a[i]-a[i-1]这样. 一些时候,如果看当前数字看不出规律,可以试着从差分上找. 好菜啊 T^T boxes#include <iostream>#include <vector>#include <set>using namespace std...

2018-03-11 18:08:26 309

原创 Educational Codeforces Round 39 D Timetable

500 有n天,每天m个小时,1为有课,0为没课,每天都必须要从第一节课开始待到最后一节课结束,但是可以翘课,最多翘k节,问你最少只需要在学校呆几天. 都是500的数量级 事实上..这是个很容易的dp.. 先处理一个zt[i][j],意为第i天如果翘j节课,最少再学校呆多少小时 n^3可以处理出来. (这个像一个格子移来移去的方法好像好常用啊,没什么好讲的就是..) 然后就是一个简单...

2018-03-08 16:03:46 143

原创 BBuBBBlesort!

这题是猜的… 给你一个不重复序列,有两种操作方式,一种是三个一起翻转,一种是两个一起翻转,猜了一下,好像如果是3个一起,那么只有左右两边会互换,如果一个点距他该在的地方位置是奇数,那就很尴尬,每次2个的距离改变,永远都没用,所以必须要一次两个翻转,ans = num/2+num&1.#include <iostream>#include <algorithm&...

2018-03-07 14:59:21 318

原创 一个很好的dp

Don’t Be a Subsequence 具体以后再补.没有想的很清楚 是这样.. 首先,需要确定这个最短子串的长度,不是单纯的字典序最小,所以..就被他们想出来了个转移方程,dp[i]为[i….)这一段中最短的非子序列长度,那么此前的每一个,都是由后者可以转移而来,事实上,也就是枚举26个字母,最后返回来,走一遍来时的路,可能有多个满足条件的,取字典序最好的就行.#include ...

2018-03-05 14:08:10 107

原创 Gym 101158G Placing Medals on a Binary Tree(二进制 微操)

n<5e5,x<1e9希望把一些”奖杯”插入到完美二叉树中,一旦一个节点被插入,他的下层不能被插入.优先满足先出现的要求. 首先,想到用二进制来模拟,是容易的,但是遇到问题是这里的最大层数有1e9,所以我们不能用数组来存,用map. //map这个蛇皮东西,最近几次用它都出问题,好像是一旦用他连pair就不太稳.. 那么我们可以很容易模拟一次放入,就是二进制加法,...

2018-02-22 18:16:59 456

原创 cf 370 概率 逆元

问你一个字符串字典序大于另一个字符串的概率. 很容易,没有思维难度,只要知道逆元就可以,注意细节.//Fafa and Ancient Alphabet#include <iostream>#include <vector>using namespace std;#define debug(x) std::cerr << #x << "...

2018-02-20 17:23:45 202

原创 cf 350 三分或者思维

q个请求. 1 为输入一个数 2 为询问 输入的数为一个不降序列 询问为让你输出当前序列中一个子集,使得子集最大值减子集平均值最大. 首先可以知道,子集最大值,一定是序列最大值. 然后,为了让平均值最小,选取序列最小值放入. 如果,前k个和最后一个的平均值比第k+1个大,那第k个可以放进来. 那么显然,当新的数字被放入,第k+1个也会被宽限,所以只需要向右更新.#inclu...

2018-02-18 12:27:57 113

原创 cf 500 思维

A Twisty Movement 给出一个1,2的串,给你翻转一个区间的机会,问你可以得到的最大不降子序列长度. 注意到这个题目的细节,n<2000,数值只有1和2,应该是dp,可以想到,这个题目的答案,应该是出现在某一个区间翻转之后,拿翻转区间的左边所有1,翻转区间右边所有2,以及翻转区间本身的最长不降子序列长度.#include <iostream>#incl...

2018-02-15 17:05:24 175

原创 Codeforces Round #461 (Div. 2) D 922D Robot Vacuum Cleaner

给出一些子串,问你如何组合这些子串,可以使得总串中的s-h对最多.4sshhsshhhs=>ssshhshhhs = 18想法是,如果两者交换,可以使得总和增加,那么就交换. 块内块外的细节比较有意思,但是不难.#include <iostream>#include <algorithm>using namespace std;#de...

2018-02-09 13:37:40 205

原创 atcoder Restoring Road Network(floyd的应用)

给出一张最短路的表,问你是否有可能正确,如果正确,输出最短的所有路径和. 这题吧,其实一开始是猜的,看到300的数据,想到了floyd,然后这样想,一个最短路数值被认为是”错误的”,肯定是要先认为其他是正确的,显然,是短的推翻长的,所以,跑一遍floyd,判断是否有某个段有问题,然后最短路径和的话,注意到假如一个最短路,不会和任何中继方式相等,那他就是直连最短路,一定要他的,所以这种,被加上....

2018-02-08 11:44:50 205

原创 cf gym cupcakes(简单思维)

这题当时..唉都是泪..今天写了一下,蛮简单的.没什么思维难度…#include #include #include #include using namespace std;#define debug(x) std::cerr typedef long long LL;const int MAXN = 1e5+17;LL a[MAXN];int main(int arg

2018-02-05 14:44:43 238

原创 cf Substring(dfs,判环)

给出一个有向图,每个点标一个字母,问你找到一条路径,使得这条路径上出现的某个字母出现次数最多的最大值. 5 4 abaca 1 2 1 3 3 4 4 5 这题的思路是不难想的,一个树上dp,每个父节点用子节点返还的信息更新自己,表达数据为从本处往下走,任何一种字母,最多经过多少次. 但是本题要判一下环,有向图的判联通是这样.bool huan = false;void

2018-02-01 15:25:57 199

原创 atcoder FT Robot(切割的dp)

一个机器人在(0,0)位置,给出一串指令和一个终点 FTFFTFFF 4 2 F即为向前走一格,T为顺时针或者逆时针转动. 问你能不能到终点, 指令最长为8000 一个dp的思路,dp[2][2][i],表示在该次行走后,能不能到i位置,0,1,分别表示x,y轴. 一般来说,在坐标轴的转移,都是[x][y]这样的平方转移,因为你不知道,下一次转移,可能是走x轴,也可能是走y轴,所以要

2018-01-30 16:33:51 206

原创 atcoder checker 坐标图

给出k,k意味着,假如k=3,那么这个图形就如上所示,无限延伸,想要知道,给出n个坐标,和这n个坐标的颜色,问你,这个图在所有摆放方式中,那种可以满足最多坐标条件? 1.所有点,都可以通过%2k来收缩到一个2k*2k的图内. 2.假如一个点在(x,y)要为黑,那么这同时意味着,(x+k,y)一定要为白,所以,所有都可以转化为白,问题就是要最多点满足,不需要每个点讨论. 所以问题就是,在底图移

2018-01-28 16:57:37 259

原创 atcoder Wide Flip 翻转

给出一个01序列,问你假如每次至少翻转长度k,使得最后全为0或1,这个k最大多少. 容易知道(百度知道) 一个数可以由(x,x+k+1)和(x+1,k+x+1)完成变换,所以不能这样做的是中间的连续段,长度为2k-n,所以求出中间最长连续段即可.#include using namespace std;#define debug(x) std::cerr typedef long

2018-01-27 13:43:06 252

原创 cf Exams 贪心+二分

n天,有m门考试10 30 0 1 2 3 0 2 0 1 21 1 4为0则代表当天只可复习,1~m则代表可以参加某一门考试,不参加也可以复习. 每一门考试有自己需要的复习时间. 这题的做法是二分后,贪心检测. 实在是不知道怎么做.. 因为这个题目是某种”分开的”,也就是你直接二分,二分后直接贪心,而不是他们混杂在一起,这一点我确实没有想到..这里的贪心,不像一些很难

2018-01-25 20:45:19 247

原创 所谓暴力

暴力就是,你要观察一下数据大小,如果是一些具体数字,却出现了限制,那很有可能需要暴力遍历,递归的话,如果有状态记录,则最多遍历状态种类数,如果没有记录,则可能要根据具体数据状态确定.

2018-01-23 13:26:47 128

原创 CF 线段树 gcd改变

Bash and a Tough Math Puzzle 可以过100的数据 但是50w就过不了了,具体不明,没看过题解. 没加第二种情况的返回值..#include #include #include #include #include #include #include #include #include #include #include #include

2018-01-22 21:51:27 233

原创 cf 644人 二进制 数位dp?

一个数变成他的二进制表示中的一的个数 6->2->1 问2^1000以下所有数中,可以进行这个操作k次的数有多少个. 找到每个数需要几次的思路是容易的,问题是这个组合数的计算过程 1,有自己和没自己,0则直接没自己#include #include #include #include #include #include using namespace std;#defin

2018-01-22 21:50:28 151

原创 Codeforces Round #457 (Div. 2) 916B Jamie and Binary Sequence (二进制)

给一个数n,让你用k个2的幂来表示他.但是这种表示中,必须要找到最大幂次最小,且字典序最小的那个序列. 例如 23,5 = 3 3 2 1 0 核心思想是,任何一个longlong,都可以二进制表示出来(废话). 但是任何一个二进制数,都可以通过2^x = 2*2^x-1来加一.所以,任何int,都可以被表示(在k足够大的情况下,即便x放到很大的负数,仍然可以.) 做法是,先将n的二进制表

2018-01-20 22:57:51 146

原创 cf 495人题 简单dp

就是python的语法,for之后一定要缩进,给出for或者statement的顺序,问你代码形式有多少种./* Farewell. */#include #include #include #include #include #include #include #include #include #include #include #include #inclu

2018-01-19 00:06:37 136

原创 cf 600人 bit+大量stl乱搞

Remove Extra One 给出一个排列,问你移除其中那个数,可以使得其中的record最多. record定义为该数前所有数都小于他. 反正就是一通乱搞把,好笨啊./* Farewell. */#include <iostream>#include <vector>#include <cstdio>#include <stack>#include <cstring>#inc

2017-12-14 21:10:12 222

原创 关于dp和记忆化搜索

dp的的转移,可以看成枚举所有情况,再加上枚举所有转移方式,得到转移结果. 而记忆化搜索,其实就是一种深搜式的带剪枝dp,我傻逼一样的深搜,其实只是暴力枚举,蠢的一匹. 挂上来把/* Farewell. */#include <iostream>#include <vector>#include <cstdio>#include <stack>#include <cstring>#i

2017-12-11 20:33:59 646

原创 匈牙利算法 素数间隔

素数间隔很小,在大概<1000的范围内. 匹配.一些边,使得二分图的两岸两两匹配.即一条边,就是匹配了一对人. 最大匹配,最多边. 所谓匈牙利算法,就是给每一个点找配对,如果他找到一个点,而这个点刚好没有被配对,那么就可以直接配上,但是他很不讲道理,如果配不上,就要要然这个点回退,看他原配能不能再配上,那么他的原配,也要重复这个过程./* Farewell. */#include <iost

2017-12-03 16:04:57 353

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除