自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Cichard

我不懒

  • 博客(32)
  • 收藏
  • 关注

原创 线段树模板

这里写自定义目录标题新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入在这里插入代码片# 欢迎使用Markdow...

2020-08-28 10:38:43 84

原创 codeforces1400B 贪心

1400B 1700的题题意:两个人有p和f的金币,一个店铺里有cnts把剑,cntw把斧头,剑的价值是s,斧头的价值是w,两人的金币不能合起来用,问如何买才能得到最多数量的工具思路:贪心,设剑的价值更小,首先把价值更小的全部买完,如果不行,直接打印,如果能,那么对第一个人枚举买剑的数量,同时在此情况下,能买最多斧头,另一个人把剩下的剑买完,然后在买最多数量的斧头即可代码如下:#pragma GCC optimize("Ofast","inline","-ffast-math")#pragma G

2020-08-28 10:37:47 227

原创 codeforces1400D 思维

1400D 1900的水题题意:一个数组找出有多少组i,j,k,l,使得a[i]=a[k]&&a[j]=a[l]思路:看到范围可以想到应该是一个o(n^2)的复杂度,对于这四个值,我们肯定不能直接暴力枚举,可以现固定一个点然后对其他点进行枚举,那么选哪个点进行固定就成了一个问题如果从一开始就说k是不太现实的,但是可以经过分析得到我们要固定的点是k,为什么这么说呢,如果你固定了k,你可以在预处理i的值,同时在进行l的枚举的时候可以兼顾j的值,当你a[k]=a[l]的时候,可以通过预处理直

2020-08-28 09:58:56 282

原创 python 函数 def 全局变量

# 函数和c++没什么差别,就是少了对函数的定义没有int,void,bool之类的,变成了def,返回或者返回都行def add(x,y): return x+yprint(add(1,2))# 函数的话有一个需要注意的点是全局变量和局部变量,在一个函数中如果有与全局变量名称相同的话默认使用的是局部变量# 如果没有相同的话,默认print的是全局变量,为什么说是print,因为你除了print其他的都是要进行操作,那么就意味着你定义了一个局部变量# 要么报错,说你没有定义,要么就没有修改到全

2020-08-28 08:56:31 5111

原创 python 字典 map

# 字典,有键-值,有点像c++里的unordered_map(不排序的map),用{} 表示,性质差不多一样,也是键的值是唯一的,如果后面出现会覆盖前面的# 字典的定义和访问info = {"name":"hhhh", "age":18, "name":"111"} # 这里的name的值是111而不是hhhh# 如果键不存在,会报错,所以之前还是要get一下# get如果没有在字典中找到对应的元素会返回None,可以加一个参数表示如果没找到返回的是什么print(info.get("name

2020-08-28 08:56:03 1034

原创 python元组 tup

# 元组 tuple ()表示元组,用逗号分隔,只要有逗号类型就是元组tup1 = (5) # <class 'int'>print(type(tup1))tup2 = (5,) # <class 'tuple'>print(type(tup2))# 元组不允许修改也就是直接通过元组下标进行修改# 增加,两个元组直接相加,tup2 += tup2print(tup2)# 删除 del 直接删除这个元组,即变为未定义# # 其他的就没啥了...

2020-08-28 08:55:28 631

原创 Python 列表 list

# 以下所说的数组皆为列表 []表示列表# append函数将这个参数当成一个整体直接加入到数组中# [1, 4, 5, 9]---> [1, 4, 5, 9, 10]str1 = [1,4,5,9]str1.append(10)print(str1)# extend函数,将str2数组逐一加到str1中# 如题的为[1, 4, 5, 9, 10]---> [1, 4, 5, 9, 10, 7, 6]str2 = [7,6]str1.extend(str2) prin

2020-08-28 08:49:28 218

原创 codeforces1395D 贪心

思路清晰很重要,不然写出来的代码一堆的bug题意:给你n个数,其中如果x>m,那么之后的d个数就没有作用,问你得到的和最多是多少思路:一开始以为是dp,然而并不是,直接贪心就可以过了,对于a[i]>m的数放在一个数组里,其他数放在另一个数组里,从大到小排序,求前缀和,分别为a[i]和b[i],之后就是贪心的过程了,假设你可以用i个大于m的数,那么就意味着,你用去了day=(i-1)*(d+1)+1天,为什么这样写,因为首先可以想到把一个数放到最后,那么就是说你有一天用的单独的一天,但其他i-

2020-08-25 17:07:15 152

原创 LIS 最长上升子序列 多种解法

最长上升子序列分严格上升或者不严格上升,我写的代码是严格上升的,也就是说前后不可以相等 1 1 1 1 不算上升序列,和不严格上升相差一个的等号,其实没什么差别,思想是一样的。DP最基础的是dp,复杂度为O(n^2),虽然说我觉得没什么dp的影子。dp[i],表示选第i个数,且以第i个数为结尾的最长上升子序列为多少,状态转移方程为dp[i]=max(dp[k]), (1<=k<i&&a[k]<=a[i])。核心代码如下:while(~scanf("%d", &am

2020-08-24 10:39:21 132

原创 hdu1024 最大子和段 dp+滚动数组

刚开始刷dp,先来几个水题题意:把一个长度为n的数组分成不重合的m段,求最大和思路:显然的dp题一开始的思路就是,一个二维数组dp[i][j],表示选第j个数并把a[1,j]分成i段那么就要想这个dp[i][j]是如何来的,可以由dp[i][j-1], 即前j-1个分成i段并且选了a[j-1]这个数,所以可以直接加上去,还有一种情况是可以a[j]自成一段,那么dp[i][j]就等于max(dp[i-1][k])+a[j], 1<=k<=j-1,前j-1个分成i-1段加上a[j]自成一段,

2020-08-23 23:04:48 99

原创 codeforces1401D dfs+贪心

1401D题意:给你一棵树n个节点,n-1条边,然后给你m个值且都为素数,m和n之间的大小未知,让你对这n-1条边赋值使得这n-1条边的乘积为m个值的乘积,现让你在用1最少的情况下(即为边的值),使得最大,简单的说就是节点1到节点2,3,4…n所经过的路程加上节点2到3,4,5…n所经过的路经加上…n-1到n所经过的路经。思路:简单的说就是如果n>m那么就意味这有n-1-m条边是要被赋值1的,如果n<m,就意味着最大的那条边要多乘上m-n+1条边,这个是对与边的贪心,之后就是难点了,每条

2020-08-23 16:33:22 232

原创 EOJ2020.7C 二维前缀和+差分

https://acm.ecnu.edu.cn/contest/292/problem/C/

2020-08-16 17:58:26 231

原创 cf1367E 思维+贪心

1367E 1900的题题意:给你n个字母,其中仅由a-z26个小写构成,选其中ans个字母围成一个圈使得这个圈逆时针旋转k个位置还是和一开始一样,求你能得到的最大的ans思路:一开始的思路是旋转k个位置后,每个字母的位置还是没有发生改变,那么就意味着,...

2020-08-16 17:17:44 130

原创 cf1333C 思维题+前缀和

cf1333C

2020-08-16 16:46:55 201

原创 codeforces 1391D 状压dp

待补

2020-08-16 16:06:00 248

原创 codeforces1399E1 dfs+优先队列

1388E1 2000的题题意:给你一个具有n个点,n-1条边的树,且每条边都有其权值,你可以对这些边进行操作,比如这条边的权值为w,进行操作之后变为w/2向下取整,问你最少进行多少次操作才能使得从根节点到各个叶子结点的权值之和小于S。思路:对这棵树进行dfs一遍得到从根节点到叶子节点每条边要经过多少次,然后进行贪心,用优先对列来实现,因为他的操作是对w/2,进行向下取整所以不能说直接用经历的次数*该边的权值,会有精度损失。具体实现可看代码,memset是真的比for慢将近一倍#pragma GCC

2020-08-16 14:51:40 153

原创 codeforces1398D DP

1398D 1800的题,简单dp,但架不住我dp菜啊题意:现在给你R对红色小棒,对应的长度为ri, G对绿色小棒,对应长度为gi, B对蓝色小棒,对应长度为bi,现在让你把这些小棒组合成矩形(四根小棒),要求为对应的边颜色要一致,相邻的边颜色不一致,问你能得到的最大的矩形面积。思路:一开始想的是贪心,但后来想到了一个反例如下:6 66 65 5 5 5,如果按照贪心的话就是662,但是实际上他最大的面积是564,所以要用dp进行暴搜,然后取最优开个三维数组dp[i][j][k],表示R只考虑

2020-08-16 10:56:29 186

原创 codeforces1398C 思维题

1398C 1600的题题意:给你一列字符串,其中的字母在0~9之间,选择其中一个区间【l, r】,使得这个区间内的和等于r-l+1,问最多有多少个这样的区间。思路:这题主要是思路比较新把,或者说我很少碰到这样的题目,就是把求有多少个区间和等于r-l+1, 转化为有多少个区间和为零,那么如何转化呢,就是把之前的该数组所有的数都减去1即可,之后的实现就比较简单了,用一个map就可以,用数组存储是不行的,因为存储不下来,而且ans要开ll,因为最多的区间为(1+1e5)*1e5/2,显然爆了int的范围,血

2020-08-16 10:21:50 274

原创 ubuntu的配置

首先安装的时候选择完全安装和安装,值得注意的是要安装第三方软件,不然进去之后没有wifi,要自己进行配置之后就是一些别的配置安装Synaptic Package Manager可以在软件商店里面找到, 用来安装其他一系列的程序安装chrome在官网中下载安装包,然后sudo apt-get install libappindicator1 libindicator7sudo dpkg -i google-chrome-stable_current_amd64.deb sudo apt-get

2020-08-14 11:15:19 99

原创 codeforces 1385E 拓扑排序

1385E 2000的题题意:给你一个图,n个点,m条边,但这m条边有些是定向的,有些是未定向的,需要你去决定方向,问你是否能让这个图不形成环,而且要对所有未定向的边定向。思路:拓扑排序可以判断一个图是否是有向无环的,所以可以用到,先对以定向的边进行判断是否已经形成了环,如果形成了环那就肯定不能符合条件,反之,如果未形成环,那么就一定能符合条件,按照拓扑排序出来的顺序,可以用一个数组pos记录,当pos【x】<pos【y】时,即意味着x在y之前就出来了,所以可以加上x->y的一条边是对这个图

2020-08-08 10:24:36 232

原创 codeforces 1380D 模拟+贪心

1380D 1900的题题意:给你两个数组,长度为n的a【】,和长度为m的b【】,保证数组内的数字不同,你能进行的操作有两个,op1:选择连续的k个数字,花费x,使其删除op2:选择连续的两个数字,花费y,删除其中更小的一个通过这些操作使数组a变为数组b,如果不能则输出-1,如果能则输出最小的花费思路:这题要注意的主要是爆int范围一直wa6 。首先的思路要清晰,对于数组a变为数组b首先要具备的条件就是b是a的子序列。然后对数组a进行拆分,假设要删去的为(l, r),l和r是不需要删去的,要删

2020-08-07 20:41:45 165

原创 codeforces 1375D 模拟+思维

1375D 1900的题题意:给你一个n,然后是一个数组,其中的值为0~n,定义mex为数组中0~n不存在的最小的那个,操作为可以将第i个数字为mex,使得这个数组为不递减的数组,可以证明操作次数在2n次内一定能实现,问你操作次数是多少,并输出相对应的索引,操作次数不要求是最优的。思路:看到在2n次内一定能实现,并且不要求是最优的,可以想到我们一定可以把这个数组变为一个我们想变成的数组,例如1~n的递增,或者说是0~n-1的递增,通过模拟可以知道这两种情况在特定的条件下都是能够实现的。首先当mex=n

2020-08-07 20:25:42 178

原创 codeforces 1383B 位运算

1383B 1900的题题意:给你n个数,得分为你选的数的异或和,现在小明和小红进行博弈,小明先手,两人的选择都是最优的,问小明能否win思路:我的想法是看了标程之后做出来的,首先对这n个数进行取异或和ans,如果ans=0那么就意味着,无论两人怎么取,最后的得分都是一样的。然后讨论ans!=0的情况,我们要知道对位的运算,肯定是你取到了最高位的你就肯定获胜了,所以对我们得到的ans进行位运算,从高位开始,如果有高位不等于0,那么对所有的数进行当前所在的位运算,因为只有当前位能对最终的结果造成影响,用一

2020-08-07 17:20:37 263

原创 牛客多校第八场K 贪心+int128

Kabaleo Lite题意:给你n种菜的利润和n种菜的数量,且招待客人的话一定要从第一盘开始顺序选择,不能跳过任意一盘菜,问你最多能招待多少个客人,然后在招待相同的客人的情况下利润如何才能最高思路:首先题目求的是招待最多的客人,而且还是只能从第一盘开始招待,所以显而易见的是最多能招待的客人为第一盘菜的数量,然后在招待相同客人的情况下,进行贪心,从前往后,首先维护利润的前缀和,菜的数量前面的一定大于等于后面的,所以可以从大到小进行贪心,具体实现可看代码,sort一边,然后定义最小的位置,即这个位置之后的

2020-08-04 19:12:57 155

原创 牛客多校第八场I题 并查集

Interesting Computer Game题意:给你n对数,然后每对数只能挑一个数,并且如果这个数在前面被挑过了,那么就不能被挑选,问最多能挑多少个数思路:我一开始想到的是拓扑排序,毕竟之前正好刷过这样类似的几道题,然并软,我就是没有做出来。先说一下并查集的思路把。先说一下建图把,虽然说挺简单的,先对我们得到的数进行离散化,因为数有可能为1e9,这超出我们能开的数组的范围,而实际上题目最多能给我们2e5个不同的数,然后就是简单的建图了,每个数为一个节点,边即为每对出现就相连。首先要知道这样

2020-08-04 18:53:21 200

原创 牛客第八场G 暴力

题意:给你n行字符串,其中每行字符串分为四个单词,让你选择其中的三行,这三行要符合对于同一列的单词要么都一样要么都不一样,其中‘*’可以表示任何单词,打印出你选择的行,如果没有则打印-1思路:纯暴力,这题难点我觉得是在输入上,毕竟没其他的了。对于输入的字符串的单词用map记录以下,然后得到id,或者hash也行,单纯的觉得map更方便一点,然后对 “ * ”区别对待就行,然后判断,三层for,如果你选的这三行其中有一个‘ * ’ 号那么就能过,其他的要么全部相等要么全不相等。判断以下就行。#includ

2020-08-04 14:28:02 105

原创 codeforces1389D 思维+模拟

1389D 2100的水题。。。题意:给你一个n表示操作次数,k表示重合区间长度,然后两个区间分别为[l1,r1],[l2,r2],操作为对其中任意一个区间进行增长任意次,增长一个单位ans++,当这个操作完成之后,区间变为原来的,然后进行下一次操作。思路:就是模拟两个区间的重合位置,分两种情况,如果r1<l2,即两个区间没有交集,要对操作次数进行枚举,因为有可能你操作次数多了还不如直接两步一个交集如果r1>=l2,即两个区间有交集,虽然说等于的时候是没有的,但可以看成是有,无伤大雅。这

2020-08-02 21:06:12 275 1

原创 codeforces1379C 贪心+二分+思维

1379C 2000的题吓了我一跳水题一个,起码在2000里面是个水题题意:给你n次操作,m组数据,其中m组数据是这样的,有一个是第一次a数组,第二次及以上b数粗,如果你的操作是对i第一次那么ans+=a[i],如果是第二次及以上那么是ans+=b[i],问你如何操作才能使得ans取得最大值。思路:一开始我的想法是完全背包。。。因为你第二次是无限取b,前提条件是必须先取一次a。然而,然而,这就是一道简单的贪心,因为你最后得到的答案一定是取多次a以及对一个b取多次,所以只需要对a进行枚举,然后就可以得出

2020-08-02 20:19:49 264

原创 codeforces 1388D 拓扑排序

1388D 2000的题题意:给你两个长度为n的数组a和b,a表示原始数组,如果对数组i进行了操作,也就是ans+=a[i]之后,如果b[i]!=-1,那么有a[b[i]]+=a[i],让你求最大的ans,并打印出操作序列,操作序列长度为n且各不相同。思路:首先的想法是有点像图论,毕竟对a[i],进行了操作之后a[b[i]]就会发生改变,也就是说这是一个有向且无环的图,为i->b[i]的图,然后对这个图进行操作,对于一个入度为零的点,因为其他操作不会影响到他的值所以可以进行操作,但是对于这个点的大

2020-08-02 19:09:09 275

原创 AC_automaton,AC自动机模板

/* AC自动机,对多个模式串匹配,查找给出的文本串有多少个出现在模式串中 最简单的模板,需要修改 */const int N = maxn*8; //N表示n*m,n为模式串的个数,m为模式串的长度struct AC_automaton { int tr[N][26], tot; int e[N], fail[N]; void init(){ memset(tr, 0, sizeof(tr)); memset(e, 0, si

2020-08-02 15:38:50 144

原创 字典树板子

/* 字典树的板子, insert表示原字符串, find表示在是否在原字符串中是否存在这样的一个字符串,或者前缀也可以验证 (不然直接一个map或者hash就过了)*/struct Trie { int nex[maxn][26], cnt; bool exist[maxn]; // 该结点结尾的字符串是否存在 void insert(char *s, int l) { // 插入字符串 int p = 0; for (int i = 0; i < l;

2020-08-02 11:18:40 133

原创 异或最小生成树

/* 对于n个点的完全图,每两个点之间的距离等于两点的权值的异或和,求最小生成树 */int n;struct XorTrie{ int dfn = 0; int t[maxn*30][2]; int L[maxn*30],R[maxn*30],val[maxn*30],a[maxn]; void solve(){ sort(a+1, a+n+1); for(int i = 1; i <= n; i++) Insert(a[i],i);

2020-08-02 10:50:27 397

空空如也

空空如也

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

TA关注的人

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