自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)

原创 Educational Codeforces Round 73 (Rated for Div. 2) D(dp)

D 给你n个点的初始值,和每个点提升1所需要的代价,问最少需要代价能够使任意相邻的两个点的值不同。结论1, 每个点的提升值不超过2 例如 4 4 5 中间的4最多提升到6那么对于每个点我们有三个状态 +0 +1 +2 ,下一个点也可能有3个状态, 则一趟状态转移有9个状态,则dp的复杂度为9*n我们令dp[i][j] 为前i个都满足条件 并且第i个上升值为j的时候的最小花...

2019-09-22 15:35:25 36

原创 杭电多校第二场 I Love Palindrome String (Pam+Hash)

给你一个字符串,问长度为0~|s| 满足l~r为回文串 并且l~(l+r)/2 也为回文串的数量由题意可知如果长度为偶数则 需要满足l~(l+r)/2 == (l+r)/2+1~r如果长度为奇数则需要满足l~(l+r)/2==(l+r)/2~r对于回文树上的每个节点,我们预处理每个节点的回文串的末尾字符所在的下标 然后hash特判回文串是否满足然后根据长度累计答案#incl...

2019-09-19 22:29:50 32

原创 Codeforces Round #577 (Div. 2) D(DP)

给你一张n*m个的表格和k个点有宝藏, 以及只有b列的位置可以往上走,在其他列只能往左或者往右走,每次只能往左往右或者往上选择一个方向走一格,问从(1,1)找到所有宝藏最少需要多少步做法: 考虑走完每层所有有宝藏的时候,必然是位于最左边有宝藏的位置和最右边有宝藏的位置设dp[i][0], dp[i][1] 分别为从1到第i层找到所有宝藏后位于最左边宝藏的位置时的最短路径和最右边宝藏位置的...

2019-09-17 23:28:19 36

原创 BZOJ 4892 DNA (sa+暴力)

给你一个母串 和 一个子串 问母串中有多少个子串更改不超过三个字母 可以和子串相匹配。做法: 把母串和子串连起来建sa数组 然后 对母串的开头 和子串的开头进行枚举,如果首字母相同则求下一个跳到当前位置+lcp(母串当前位置,子串当前位置) 然后继续往下比较 最多只要跳不超过3次 就可以完成一次 开头的枚举建sa O(T*nlog(n)) n为母串加子串的长度暴力 O(T*3*n)...

2019-09-16 22:59:39 42

原创 序列自动机学习

序列自动机一个可以n*(字符集)的复杂度预处理出字符串第i位及以后第一次出现大于字符j的位置原理 if x>j dp[i][j]=i; else dp[i][j]=dp[i+1][j];#include<iostream>#include<cstdio>#include<algorithm>#include<cmat...

2019-09-09 20:47:31 123

原创 回文树/回文自动机学习

len[i]:节点i的回文串的长度next[i][c]:节点i的回文串在两边添加字符c以后变成的回文串的编号fail[i]:指向i的最长回文后缀且不为icnt[i]:节点i表示的回文串在S中出现的次数(建树时求出的不是完全的,count()加上子节点以后才是正确的)num[i]:以节点i回文串的末尾字符结尾的但不包含本条路径上的回文串的数目。(也就是fail指针路径的深度)last:指向...

2019-09-07 21:03:34 46

原创 2019徐州icpc网络赛补题

G :给你一个字符串求所有的回文子串中不同种类字母的数量(每个回文子串单独计算)做法首先建立回文树,并求出与每个节点i回文串出现的次数,然后分别在偶节点0和奇节点0跑dfs,dfs的点来自next树,边表示字符串c,节点表示回文子串,则每次dfs到一个节点,答案更新为该点的回文串出现次数*已有的字符数种类数。字符种类数用一个26大小的vis数组存每次找到下一个点则vis[边]++, 回溯则...

2019-09-07 20:50:27 84

原创 2019南京网络赛A 题解

首先O(1)算出 m个点的对应的beauty值,然后就变成了一个二维数点问题,在一个n*n的矩阵上,有m个点,q个询问每次询问一个矩阵内的值之和。由于n的范围为1e6,二维树状数组加离散化或者二维前缀和加离散化开不下,如果用map存pair会多加一个log 复杂度为n(logn)(logn) 会T,这里要用到二维偏序预处理加一维树状数组。在y轴上建立树状数组,对每个点的x轴和y轴进行排...

2019-09-06 22:49:07 75

原创 ac自动机学习

模板:#include<bits/stdc++.h>using namespace std;const int N=500005;struct ac_automation{ int trie[N][26]; int e[N]; //字符串的结尾标记 int fail[N]; int L,root; int newnode()...

2019-09-01 11:34:23 34

原创 2019牛客第十场题解(C/F)

C题意:第i天在原来字符串的基础上在字符串的前面或者后面添加一个字符。问添加完字符后有多少种不同长度的循环节。定义循环节为能把原字符串分割成长度为k的一个或多个部分。并且后面可以有或者没有循环节的开头部分。也就是说 s[1]~s[n-x] == s[x+1]~ s[n] 则说明循环节为x 。做法一 hash+二分:1.明显,对于长度为len的字符串,最少有一个长度为len的循环...

2019-08-19 21:22:14 57

原创 2019牛客多校第八场题解(A)

A给你一个n*m的01矩阵,求出所有最大全1矩阵的数量,保证任意两个矩阵不相互包含。考虑单调栈求最大矩形面积的做法。对于矩阵0 0 0 00 0 1 00 1 1 01 1 110 0 0 0我们先预处理h[i][j] 为以该行为底的最大高度。那么我们只要知道这个矩形最左边的能够到达的位置L由于每次我们是从左到右遍历数据的 所以我们可以确定右边界R ,并且...

2019-08-16 22:24:31 64

原创 2019牛客多校第九场题解(D/E/J)

D给你最多36个数和 一个定值s,找一个子集使这些数的和为s做法将集合分成两个部分,先对右边部分用二进制数枚举选取情况,然后求和之后用map存下来,键值为值,值为对应的二进制数然后对左边部分用二进制数枚举选举情况,求和后用s-sum,看map中是否存在这个键值,如果存在则找到了答案,则将相应的二进制数分左右部分分别输出出来。复杂度 ( map查询有一个log(n)的复杂度...

2019-08-15 20:42:29 138

原创 kmp&扩展kmp&manacher 学习

kmp: 求出模式串在文本串中第一次出现的位置 O(n+m)扩展kmp: 求出模式串与文本串中每个i为下标的后缀串的最长公共前缀 extend[i] O(n+m)manacher:求出母串中的最长回文子串O(n)kmp模板:#include<cstdio>//O(m + n) m模式串 n文本串#include<iostream>#include&l...

2019-08-09 22:29:23 39

原创 2019杭电多校第六场(C/E)

C:求出本质不同的回文串中能构成一个串为另一个串的子串所有字符串对的pair数做法: 考虑每个点和他的fail点的贡献 , 在偶回文树和奇回文树上分别dfs, 求出该点和他的子节点的size, 然后该点的贡献就等于该点和他的fail点的未标记数,因为某个点和他的fail 点一定是该点的子节点的子串,那为什么不在fail链上继续往前找,因为根据回文树的性质,在一个节点fail链上往前找最后一定会...

2019-08-07 22:20:29 41

原创 后缀数组学习和经典题

模板其中 build_sa,getheight, st_build, query的部分都是将原字符串经过最后一个字符为0的处理后的模板倍增和D3C两个版本 倍增是 D3C接近倍增版本#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#...

2019-08-04 16:11:12 34

原创 2019牛客多校第四场A/K

A.给你一张n个点n-1条边的图,和k个关键点。求一个点到所有关键点距离最大值的最小为多少。乍一看像是对答案二分,但是考虑两个相距最远的关键点,假设他们的距离为d,那么答案肯定为(d+1)/2如果有一点到中心点的距离超过了(d+1)/2 ,那么这个点会成为最远关键点对中的一个。矛盾。所以题目就变成了如何求最远的两个关键点的距离。考虑如何求树的直径,首先取一个根节点通过bfs找到离他...

2019-07-29 20:01:11 77

原创 max answer 和 牛客多校第四场C

max answer题意:给出一组数,求一个区间(l,r)中所有数之和与这个区间的最小数之积最大做法:对于每个数a[i], 我们可以求出满足a[i]是最小数的 合法区间左边界l[i] 和 右边界r[i]; 然后对于每个a[i]接下来我们只要求包含a[i]在内的在范围l[i]到r[i]内 最大子序列和为多少.对于l[i]和r[i]我们可以通过单调栈求出,每次加入一个元素的时候如果...

2019-07-28 23:40:30 57

原创 2019牛客第三场(D/F)

D.Big Integer题意: 当1<=p,n,m<=1e9时 求有多少对满足做法:考虑 则 则 Case1(p不为2,5,3)然后由欧拉定理当p和10的时候有 则我们知道在i为0和p-1时 所以在0~p-1中间有没有可能有一个i=d 满足这个式子...

2019-07-26 12:24:58 48

原创 2019杭电多校第一场题解

1004题意: 给你n+1辆车的车头距离终点的位置和车身长度, 以及每辆车的初始速度, 车子不会加速,当遇到前面一辆车的时候车子会瞬间减速并且和前面一辆速度相等,并且通过了终点线的车辆并不会停下来会继续行驶,问第0辆车的车头到达终点线所需要的总时间。理解:当第0辆车经过终点线的时候无疑只有两种状态,1.以原来的速度行驶,2.与前面一辆车靠在一起并且以前面一辆车的速度行驶做法1:注意...

2019-07-23 23:33:16 136

原创 Educational Codeforces Round 69 D

题意: 求 做法: 可以发现 在m,m*2,m*3 长度的区间内的K是 相等的分别为k ,k*2,k*3 所以我们可以在余数为0~m-1 的位置枚举起点,然后以每个点作为终点求出cost 然后每到达一个可能为新的起点 维护最小前缀和,将该点作为新的起点或者还是继续作为终点每次计算得到的cost-维护的最小前缀和便可以得到以i, i+m, i+m*2... 为起点的最大的连续...

2019-07-23 22:09:12 29

原创 2019牛客第二场补题(F/H)

F.把2*n个人分成 两个人数相等的队伍,每两个人之间都有一个竞争值,当分成两个队伍后,两个队伍之间的竞争值之和最大为多少做法: 对每个人进行搜索将它放在a或b队里,每放一个人就计算一下当前的竞争值,这样往后搜索的时候就可以利用一下前面的竞争值,避免重复计算,(还有一个小优化,可以把第一个人固定放在第一个队伍里,可以减少一半的状态空间)#include<bits/stdc++....

2019-07-22 00:07:28 31

原创 codeforces Round#563 D

http://codeforces.com/contest/1174/problem/D任意的两子段异或和 的 异或 等价于任意两个 前缀异或和 si 和 sj , si≠sj 并且 si^sj≠x 也等价于si只能出现一次 si^x 也只能出现一次,所以只要从1到2的n次方 进行枚举前缀异或和 然后 用 s[i+1] ^s[i] 求出 a[i+1] 就是结果代码:#incl...

2019-06-04 16:51:26 38

原创 ACM ICPC 2008–2009, Northeastern European Regional Contest St Petersburg –Problem J(补题)

题意就是给你很多个字符串, 让你找到一种大写字母的替换方式,使替换后的每个字符串的字母为元音字母和辅音字母交替出现。求出替换后的字符串。比赛的时候没有明确的想法 以为必须要O(n)的算法(果然该暴力还是要暴力) 赛后看题解, 枚举每个字母当做元音然后直接判断是否满足条件,满足就输出,终止循环, 否则就继续 循环结束 就输出 impossible ;似乎还可以用二分图染色(看不懂代码...

2019-04-06 22:34:46 93

原创 欧拉筛(线性o(n)复杂度求出1~n的所有素数)

#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int maxn=1000005;const int maxl=1299710;bool check[maxl];int prime[maxn];int tot=0;int main(){...

2019-03-23 13:52:09 149

原创 Contest Hunter 4301 Can you answer on these queries III (单点修改+查询区间最大子段和)

根据lyd 的模板,我们只需要在每次更新信息的时候 同时维护t[p].sum=t[p*2].sum+t[p*2+1].sum;t[p].lx=max(t[p*2].lx, t[p*2].sum+t[p*2+1].lx);t[p].rx=max(t[p*2+1].rx, t[p*2].rx+t[p*2+1].sum);t[p].dat=Max(t[p*2].dat, t[p*2+1].d...

2019-03-18 15:25:00 46

原创 Buy Tickets POJ - 2828 (树状数组+二分)

大意:让你给你n个点的值和他们的插入位置问你在依次插入完后输出最后的序列似乎用链表可以实现(但是我太菜了并不会链表只能用高贵的树状数组了~~~~(>_<)~~~~ )首先对于这种后面的点对前面的点可能有影响的题最后一个点一定不会被影响,所以我们从后往前考虑如果最后一个点的pos[i]<前一个点的pos[j]那么前一个点的最后位置就会被后移一位 ,否则无...

2019-03-16 23:11:28 38

原创 A Simple Problem with Integers POJ - 3468 (树状数组实现区间修改+区间查询)

题意: 给长度为N 的数列A, 输入Q行操作指令,C l r d 表示 把数列中第l~r 个数都加dQ l r 表示询问数列中第l~r 个数的和。这明显是线段树的操作。。但是咸鱼的我 想用树状数组 (吃饱了没事干)首先对于区间修改,通常想法 我们可以 用一个树状数组b1来维护 ,C l r d 就相当于在 节点l 加d , 在节点 r+1 处 减d树状数组b1 的的前...

2019-03-16 22:48:35 54

原创 2018 青岛复现赛J - Books ZOJ - 4067

https://cn.vjudge.net/problem/ZOJ-4067题目大意一共n本书,要从前往后取m本,如果当前手中的钱比第i本书大,就一定要买下来,然后减去这本书的钱继续从前往后买。求出初始最大可能的钱的数量,如果是无限的输出 Richman 如果不可能买m本则输出 Impossible 明显,m==n时 钱是无限的书的价格中0的数量大于m时输出Impossible ...

2018-12-06 23:40:09 76

原创 优先队列用法

1.priority_queue<int>q     从大到小2.priority_queue<int , vector<int> ,greater<int> >q 从小到大或者 自定义优先级struct cmp{ operator bool ()(int x, int y){     return x>y;   小...

2018-11-26 15:46:58 52

转载 acm中用memset给数组初始化

头文件:cstring 或 memory话说刚开始使用memset的时候一直以为memset是对每一个int赋值的,心里想有了memset还要for循环对数组进行初始化干嘛。但其实memset这个函数的作用是将数字以单个字节逐个拷贝的方式放到指定的内存中去。比如memset(dp,0,sizeof(dp));int类型的变量一般占用4个字节,对每一个字节赋值0的话就变成了“00000...

2018-11-04 14:29:30 321

原创 A - Appearance Analysis Gym - 101173A

https://vj.e949.cn/ac69a6cced5131fcb0617bc659755d0e?v=1540621216题目大意就是问以# 分割的窗户有多少种,一个窗户以旋转90度的整数倍后能够完全的与另一个窗户重合则这两种窗户是同一种分析,实际上我们只要把每个窗户的所有旋转状态求出来 然后用map记录最后求出总数除以每个窗户的状态数就是结果,关键在于怎么存储每种状态刚...

2018-11-01 17:34:06 64

原创 2017CCPC杭州C - Hakase and Nano HDU - 6266

http://acm.hdu.edu.cn/downloads/CCPC2018-Hangzhou-ProblemSet.pdf题目大意 有N堆石头 每个石头有一定的数量的石头,其中H可以必须每次连续拿两次 每次最少从一堆中拿出1块,N每次只能那一次,同样是每次最少从一堆中拿出一块,拿到最后一块石头的人算赢,然后每个样例告诉你 谁会先手和石头的数目  问H能不能赢分析 : H是可以连续拿两...

2018-10-23 22:12:14 89

原创 CCPC.2017 哈尔滨站-H - A Simple Stone Game HDU - 6237

After he has learned how to play Nim game, Bob begins to try another stone game which seems much easier. The game goes like this: one player starts the game with NN piles of stones. There is aiai sto...

2018-10-23 21:11:13 130

原创 2017CCPC哈尔滨 hdu 6231 B k-th number

Alice are given an array A[1..N]A[1..N] with NN numbers. Now Alice want to build an array BB by a parameter KK as following rules: Initially, the array B is empty. Consider each interval in array A....

2018-10-22 23:07:39 80

原创 BZOJ1601

题目描述 Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记。把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库。 建造一个水库需要花费wi(1<=wi<=100000),连接两块土地需要花费Pij(1<=pij<=100000,pij=pji,pii=0). 计算Farmer John所需的最...

2018-10-16 22:36:24 54

原创 Tick and Tick HDU - 1006 (模拟+求区间交集)

大致题意:时钟上时针分针和秒针在一天中三者两两之间的夹角大于D 的时间 占一天总时间的百分比由于前十二个小时 和后十二个小时 完全一样 所以 只需要求 12个小时内的情况,刚开始想根据 两个针重合的次数 来计算所旋转的角度占全部角度的百分比 后来发现 这样做只能求出 两个指针之间 无法和第三个指针建立关系 想了挺久思维没转过来 (太菜了) 然后看了别人的题解 才发现可以通过相对角速度 把满...

2018-10-09 21:13:00 129

原创 求最短路floyd算法 CodeFoces - 601A

http://codeforces.com/problemset/problem/601/A  要求一个点到另一个点的最短路径,可以看成 求该点到这两点之间 某一个中点的距离+中点到另一点的距离之和的最小值用一个二维数组map[n][n] (n为节点个数) 保留点i到点j 的距离 可以得到方程 map[i][j]={                                 ...

2018-07-29 20:43:30 68

空空如也

空空如也

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