自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 1326D2 - Prefix-Suffix Palindrome(KMP前缀函数)

题意:给一个字符串,从字符串首字母开始截一段(可以一个都不截)字符串a,再从字符串尾字母往前截一段字符串b(也可以一个都不截)就是截一首一尾,令a+b形成一个最长的回文字符串因为没有看懂作者的答案,就去翻了可能是作者的论文??现在把他搬运过来地址在这里,有兴趣的也可以自己去看看:https://cp-algorithms.com/string/prefix-function.html名字是...

2020-04-14 18:04:06 248

原创 C++ set自定义比较函数

C++ STL 中set存储元素的默认顺序是升序的.但有的时候我们想要一个降序的.或者合并区间的(下面会有解释)顺序.这时候就要用到自定义比较.set的自定义比较函数是用重新定义()这个符号.struct cmp{bool operator() (const int &u , const int &v)const{if(abs(u,v)<=k)return false;return u<v;}}上面这个自定义比较函数就是重新定义了一个合并区间的set.含义是.如果在

2020-09-08 17:06:39 1359 1

原创 POJ3020(最小路径覆盖)

最小路径覆盖=定点数-最大匹配数/2#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;char s[50][50];struct P{int x,y;}a[500];int cnt =1;int vis[500],l[500];int e[500][500];bool serch(int x){for

2020-05-27 23:56:18 146

原创 POJ 3381最小费用流

#include<bits/stdc++.h> using namespace std; const int INF=INT_MAX; const int M = 50000+10; const int N = 5000+10; int n,m,s,t; inline int read(){ int ans = 0; char r = getchar(); while(r<'0'||r>'9') r...

2020-05-25 15:37:30 168

原创 洛谷p1343(网络流模板)

#include<bits/stdc++.h>using namespace std;const int INF = 213132323;int head[500],cur[500],dis[600];int n,m,x,cnt = 0;struct P{int v,w,nxt;}e[5000];inline int read(){int ans = 0;char r = getchar();while(r<'0'||r>'9') r=getchar();wh

2020-05-24 23:23:58 102

原创 HDU2255 奔小康(KM模板)

#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int M=400;const int Inf = 0x3f3f3f3f;int n;int ly[M],lx[M],e[M][M],pre[M],slack[M];bool visx[M],visy[M];bool find(int x){ visx[x] = true; fo

2020-05-22 20:17:43 100

原创 C++ 一些高精度算法

高精度乘法:vector<int>mul(vector<int> a,int b){vector<int> c; int t = 0; for(int i = 0;i < a.size();i++) { t+=a[i]*b; c.push_back(t%10); t/=10; } while(t) {c.push_back(t%10); t/=10; } return c;}高精度除法:vector<int>

2020-05-20 21:34:48 120

原创 牛客 NC15553 数学考试

思路:①先把前缀和求出来.②类似于dp,当前节点为i的时候,我们要记录下i之前的连续k个数和的最大值Lmax.(这就是第一段),然后让j=i+k,让Rmax=a[j]-a[i],这样然后MAX=max(MAX,Lmax+Rmax).这样的复杂度是O(n)看代码#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;type

2020-05-20 16:15:54 147

原创 HNOI2003激光炸弹

没想到是前缀和,太拉跨了.一道二位前缀和的题,被正方形的边上不能炸给唬住了.思维江化.f[i][j]用来存坐标为i,j的点和坐标1,1的点所围成的矩形能炸掉的最大价值.(就是个二维前缀和)有一点小巧妙地是,读入x,y,val,但存的时候f[x+1][y+1]=val因为边上不能炸,所以f[x][y]其实不能炸掉这个目标,但x+1,y+1可以.(相当于把右下角向右下移了,细品).再就是处理前缀和了.竟然没发现有两种写法…for (int i = 1;i <= n;i++) for(int

2020-05-20 09:43:36 124

原创 C++求组合数(再取模)

C(n,m) = n!/(n-m)!m!C++在处理大数除法的时候好像会出现问题,所以用除法有时候会因为精度不够没法得到正确答案.需要把除法变成乘法.知识储备:①逆元②快速幂逆元:若a*x%M=1 我们称x是a的逆元,x写做a-1(相当于整除中的倒数),那假设我们要求a/b%M的值,当b特别大时我们无法得到正确答案,这时候对式子进行一些操作:a / b % M = a / b * 1 % M = a / b * (b * b-1) % M --------------------- (b

2020-05-16 20:58:59 1283

原创 Atcoder166E this Message Will Self-Destruct in 5s

思维题题意:|i-j| = hi+hj这样看的话不太好做,最开始以为是前缀的题.看了题解之后才发现移项之后非常简单①如果i>j 则 i-hi = j+hj②如果j>i 则 j-hj= i +hi可以看出,这个式子的本质就是较大的编号减去他本身的高度,等于较小的人的编号加上他自身的高度,所以我们可以在读入的过程中同时计算i+hi的值,然后每次读入,找到在i之前的所有j+hj = i-hi的个数 (1 <=j < i),加入答案中.要注意的一点是,数组界限的问题.(RE)起

2020-05-11 18:17:30 112

原创 poj3026 Borg Maze(MST)

这道题出了几个问题:1.数组开的太小.prim里的dis,vis数组要开的大一点,最开始只开了100,疯狂wa, 后来发现A点数有可能大于100.2.bfs忘记判边界.一直死循环.3.加入队列之后标记变量忘记.真弱智4.head,tail,count忘记++就不说了.5.这里字符的读入有点坑,要用一个gets()把行末的回车去掉,并且读入的时候必须用gets,不然空格无法读入这道题不会...

2020-04-23 21:53:03 93

原创 514B - Han Solo and Lazer Gun

水题.有一个点注意,判断三点共线的时候用乘法不要用除法(y3-y1)(x2-x1)=(y2-y1)(x3-x1)#include<bits/stdc++.h>using namespace std;int x[1100],y[1100],a[1100],vis[1100];int main(){ int n,m,x0,y0; cin>>n; cin&gt...

2020-04-08 09:50:45 72

原创 CF450B - Jzzhu and Sequences

看了答案才知道有找规律的做法.但为了锻炼自己还是写了矩阵快速幂这是一个模板题,挺好的.帮助复习了矩阵乘法.有几个点,第一个是n=1的时候要特判因为n=3的时候相当于第一次矩阵乘法.所以要快速幂时要quick(n-2)怎么找用来累乘的二阶矩阵应该挺简单的吧?不会的也可以评论区留言.写了这么多博客还没有评论的卑微作者在线解答.#include<bits/stdc++.h>us...

2020-04-03 15:22:37 88

原创 CF 1249B Books Exchange

思路:通过答案可以看出,有许多人小朋友的答案是一样的.仔细观察可以发现,答案相同的小朋友其实都在同一个循环里,这个循环有多少个小朋友,他们的答案就是多少.所以这道题就成了一个并查集并找每一个集合中有多少个元素的问题.#include<bits/stdc++.h>using namespace std;int a[210000],f[210000];int people[21...

2020-03-31 18:23:09 92

原创 1104B - Game with string

自己太菜了,记录一下这个做法.#include<bits/stdc++.h>using namespace std;int main(){ char s[110000]; int i = 0; int sum = 0; while(scanf("%c",&s[i]) && s[i]!='\n') { if(s[i]==s[i-1]) ...

2020-03-27 16:24:59 129

原创 962A - Equator

很简单的题,就是出了一个小问题在这里给自己提个醒#include<bits/stdc++.h>using namespace std;typedef long long ll;ll a[210000];int main(){ int n; cin >>n; for(int i =1 ;i <= n;i++) { ll x; scanf(...

2020-03-26 20:20:32 139

原创 1006C Three Parts of the Array

题意:将一个数组分成三部分,(每一部分都可以是空,但是三部分加起来一定要包含整个数组且不重合),求出每一部分元素的和,显然,第一部分的值和第三部分的值有可能是相同的(起码第一部分和第三部分是空集的时候他们相同),问第一部分的和与第三部分的和相同时,第一部分的和最大是多少.很简单,先算一遍前缀和,再算一遍后缀和,然后二分查找后缀和中有没有前缀和中的元素.#include<bits/stdc...

2020-03-26 18:25:10 60

原创 CF 617B Chocolate

题意:把一个序列任意分段,保证每一段数的和是1,共有多少种分法这道题贼简单啊,一看到题目就想dp,想复杂了.这道题可以分段看,比如 1 0 0 1 0 1,这个序列共有多少种分法,其实只能在每两个1之间的0那里分,比如前两个1中间有两个0,他就有3种分发 10|01 ,1|001,100|1,后两个1中间有1个0,有两种分法,1|01,10|1,前两个1和后两个1在分的时候是互不影响的,因为...

2020-03-26 15:33:46 82

原创 CF 128B Just eat it

题意:一个数组中是否有一段序列和大于数组总前缀和.思路:如果有任意的前缀和或后缀和是负数,则存在序列和大于前缀和#include <bits/stdc++.h> using namespace std; #define finish(x) return cout << x << endl, 0 #define ll long long int n...

2020-03-25 15:40:09 99

原创 CF 1203C Common Divisors

题意:给你一个数组,让你求数组中元素的公共因子有多少个做了这道题才知道,n个数的公共因子个数就是他们最大公约数的因子个数…虽然不会证,但想想就挺有道理…思路:找出他们的最大公约数(gcd),再求出最大公约数的因子个数(O(根号最大公约数))有一个小问题是这个题的数据范围是1e12,循环的时候不要for(int i = 1;i*i<g;i++) 会TLE还有一个事情,bits库里自...

2020-03-25 14:37:36 67

原创 CF 546B Soldier and Badges

题意: 一个数组,其中可能有相同的数,使数组中某一个数加1的成本为1,要使数组中所有的数均不相同,所需要的成本是多少.很简单的题,桶排序或者类似于前缀和的算法都可以.但有一个坑一开始没有注意到就是最大的数可能超过n例如:n = 53 3 4 4 5这样输入的话你要让数组变成 3 4 5 6 7 而不是 1 2 3 4 5 所以代码会出错#include<bits/stdc++.h&...

2020-03-24 17:54:08 110

原创 CF 459B Pashmak and flowers

题意:在一个数列中找到相差最大的一对数,因为数列中的数可以重复,所以在后面输出相差最大的一对数有多少种取法.教训:好好看数据范围,因为bi<1e9,但我把最小值的初始值定在9个9.总是在第6个点wa.后来改成了1e9或者INT_MAX就过了,可见他的第九个点应该全是1e9…第二点是注意特殊情况,之前一直在第5个点wa,原因是最大值和最小值有可能一样,如果一样的话答案就不是最大值的个数最小...

2020-03-23 09:13:15 51

原创 POJ 3252 Round Numbers

题意:给定范围[L,R],求在这个范围里换算成二进制以后0的个数比1多的数有多少个.做法:数据范围2,000,000,000 O(n)也会超时,因为可以枚举数的每一位来解决问题,并且一个数是否满足题意与题目给的范围无关,答案满足前缀和形式:即可用solve®-solve(L-1),所以考虑用数位dpdp[pos][num]表示pos位二进制数,0比1多num的有多少个.这里因为在计算过程中可能...

2020-03-17 09:21:33 39

原创 HDU-4734 F(X) 数位dp

数位dp的优化WA做法: dp数组dp[pos][now]来存pos位的数F值为now的共有多少个,但后来发现如果不在每组数据之前清空dp数组的话答案是错的.一直没有想通是为什么,如果有大佬想通了欢迎给我评论.AC做法:借鉴了其他大佬的想法,用dp[pos][sum-now]数组存pos位的数,和为sum-now的数共有多少个.这样就可以不用每次都清空dp数组,大大降低时间复杂度.下面贴代码...

2020-03-12 20:27:57 67

原创 牛客寒假算法训练营第二场 I建通道

题目链接:https://ac.nowcoder.com/acm/contest/3003/I题目很简单,我们来分析一下目标:1.求两个点的权值的异或,一个^就能解决2.求一个数二进制最低位1的位置.首先,我们要建立的是一个最小生成树(跟最小生成树其实没关系),这些数据在位运算时有一些规律1.两个相同的数lowbit()结果为0,所以如果有两个点的权值相同我们一定会让他们两个相连,由此,...

2020-02-26 14:05:36 271

转载 学习目标

数据结构栈,队列,链表哈希表,哈希数组堆,优先队列双端队列可并堆左偏堆二叉查找树Treap伸展树并查集集合计数问题二分图的识别平衡二叉树二叉排序树线段树一维线段树二维线段树树状数组一维树状数组N维树状数组字典树后缀数组,后缀树块状链表哈夫曼树桶,跳跃表Trie树(静态建树、动态建树)AC自动机LCA和RMQ问题KMP算法图论基本图算法图...

2020-02-22 00:54:46 86 1

原创 POJ2240Arbitrage

题意应该很好理解,就不赘述了.这道题是一道判正环的题思路很简单,用floyd或者spfa判断一下是否存在正环就好了.因为我比较熟练floyd所以用了floyd.开始给mapp[i][i]全都赋值1;最后判断mapp[i][i]是否大于1就行.要注意的是这里用了map,最开始没用,只是单纯用了数组来存,然后每次n重循环找s1,s2再给mapp[s1][s2]赋值,后来TLE了,才;;用了m...

2020-02-20 19:15:29 101

原创 POJ2253 Frogger

题意:一只小青蛙要去找他的女朋友,他们分布在两个石头上,小青蛙一次跳不了太远,好在他们中间有许多石头可以作为小青蛙的中转站,但是小青蛙能跳的距离的最大值要比他在去找女朋友必经之路上的相邻两块石头距离最大值还要大.小青蛙希望自己跳的最大值能尽可能的小.(路径上最大值最小问题)思路:采用类似于DP的做法.用dijstra,dis[i]保存的是从小青蛙的位置到 i 位置所要跳的最大的距离,如果dis[...

2020-02-20 19:11:13 64

原创 POJ1062昂贵的聘礼

欢迎大家热情评论呀~如果有问题我会尽快回复的思路:这是一道单源最短路径的题,用djs(对不起我不会拼)可以做.但问题在怎么控制地位相差悬殊的人不能交易!解决的方式是枚举区间 for(int i = 1;i <= m;i++)//从比地位最低的人比酋长小m开始枚举.直到地位最低的人地位和酋长相同 { memset(kh,0,sizeof(kh));//kh数组是标记这个人在不在可以...

2020-02-18 18:48:44 77

原创 POJ 3259 Wormholes

题目链接:https://vjudge.net/problem/POJ-3259题意可以转化为:是否存在一个负环.已知负环有两种求法:Floyd和spfa(BF太慢)先说Floyd,最开始纠结过500^3会超时,后来发现有可能第一轮松弛就得到结果,就用了,结果果然题目没有故意卡(也可能是我太菜没有发现Floyd的妙处)值得注意的是,这个数据量的情况下,读入要用scanf了,用cin会TL...

2020-02-17 15:07:53 107

转载 POJ练习计划

初期:一.基本算法:(1)枚举. (poj1753,poj2965)(2)贪心(poj1328,poj2109,poj2586 )(3)递归和分治法.(4)递推.(5)构造法.(poj3295 )(6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996 )二.图算法:(1)图的深度优先遍历和广度优先遍历.(2)最短路径算法 (dijkst...

2020-02-16 12:32:13 232

原创 POJ 1860 Currency Exchange

POJ 1860 Currency Exchange大体题意:有个小朋友手里有某种货币V个,问能不能从银行通过一些骚操作把手里的这种货币变多!!.(假定她手上的货币种类是rmb吧)思路:首先,如果能用一些骚操作把从另一种钱换回rmb,那么汇率体系一定是一个循环,可以类似A->B,B->C,C->A,也就是说,这个环是一个正环(循环之后A变多),这是最优的情况,但有可能C-&g...

2020-02-15 23:58:39 78

原创 ZOJ 1003

题目描述可百度.思路:找两个数n,m(n>m)在1~100间的因子,从100往下找.如果n%i==0,就找n/i和m在1到i-1之间的因子,直到m变成了1或者i变成了0.这样,每次找的因子不会重复(因为如果出现了一个因子,就找n/i 在1到i-1的,i不出现了).且通过能否回到1就能看n和m能否在1~100间乘出来语言表达能力亟待提高.#include<iostream>...

2020-01-31 10:39:13 145

原创 字符串总结

定义 :string s;赋值: s = “.xxx”s.assign(“xxx”);交换两字符串内容: swap(a,b);在尾部添加字符: +=a += “xxx”;a.append(“xxx”);a.push_back(‘x’);(push_back只能加字符,所以要用单引号)插入字符:insert(位置,字符个数,字符);s.insert(1,2,‘b’);(直能插同一个...

2019-11-28 21:48:47 84

原创 CF-divide candies(数论,模)

题意不挂了,直接来做法:正确:因为n%m的结果一定在0~m-1.且n%m的结果每过m是一个循环.所以令n%m=i,在n个数中,i共有n/m或n/m+1(如果n%m>=i,则要+1)个.下面m2复杂度,如果(ii+jj) % m == 0 则是我们要找的,答案+a[i]*a[j] #include<iostream> #include<cstdio> #in...

2019-11-24 00:51:18 109

原创 Vladik and fractions

#include<iostream>#include<cstdio>using namespace std;int main(){ int n; cin >>n; if(n==1) cout<<"-1"<<endl; else cout<<n<<" "<<n+1<<" "&...

2019-11-23 17:29:06 250

原创 Peculiar apple-tree

第一道图论题!!!开心!!! Peculiar apple-treeIn Arcady’s garden there grows a peculiar apple-tree that fruits one time per year. Its peculiarity can be explained in following wa...

2019-11-23 16:42:00 103

原创 HDU-5933 ArcSoft's Office Rearrangement(模拟)

题目描述:https://vjudge.net/problem/HDU-5933#author=0#include<iostream>#include<cstdio>using namespace std;long long a[110000];int main(){ long long T; cin >> T; for(int i...

2019-11-20 23:55:33 89

原创 HDOJ446-Scaring the Birds(状态压缩好题)

HDOJ446-Scaring the Birds题目链接https://vjudge.net/problem/HDU-4462大意:你有一块n*n个十字路口种植玉米,其中有k个十字路口是空地,你可以用来放稻草人吓走鸟防止他们吃你的玉米,每个空的十字路口有一个惊吓范围,问至少放多少稻草人可以将所有玉米全覆盖.一道不错的状态压缩简单题解法:有k块空地可选,k<=10,运用状态压缩,枚举...

2019-11-13 19:51:40 89

空空如也

空空如也

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

TA关注的人

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