自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 ACM算法导图

队友AIDreamer画的图,觉得十分清晰,故拿来作为学习的导引。

2016-12-03 12:05:43 1132

原创 HDU 5572 An Easy Physics Problem (计算几何 点类 线类 向量类 线段与圆相交)

题目链接2015上海区域赛现场赛第5题 HDU5572题目大意光滑平面上,有一个固定的圆,圆外有两点A,B,问A以速度矢量V运动能否碰到B。(A碰到圆后会发生弹性碰撞)分析写这道题的时候没有想清楚就开始写了,比赛的时候一定要先把思路理清楚,情况比较多的题要画画树状图或者流程图。 看了一个大佬的博客中画了一个清晰的流程图,借鉴一下。 原博客链接代码#include<cstdio>#include

2017-10-19 21:21:45 380

原创 POJ 3580 SuperMemo (Sply经典操作:成段更新、区间最小值、反转、插入和删除、区间搬移)

题目链接题目大意分析代码#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <queue>#include <string>#define ls (rt<<1)#define rs (rt<<1|1)#define bit(x) (1<<

2017-10-06 11:17:52 388

原创 POJ 3468 A Simple Problem with Integers (Splay 区间更新、区间求和)

题目链接POJ3468 题目大意线段树区间更新的模板题,用Splay写一遍作为用Splay处理区间问题的模板题。分析代码#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <queue>#include <string>#define ls

2017-10-06 11:14:46 308

原创 HDU 2222 Keywords Search (AC自动机模板题)

题目链接HDU2222题目大意给多个模式串,求长串中出现多少次模式串。分析字符串多模式匹配模板题,注意模式串有可能会有重复,用单词标记数组维护模板出现的次数,匹配时用一个标记数组保证每个单词结点只计算一次即可。代码#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>

2017-09-14 21:52:25 421

原创 HDU 6172 Array Challenge (打表找规律+矩阵快速幂 17多校第十场第2题)

题目链接HDU6172题意分析不得不佩服AC这道题的人脑洞,为什么你们这么熟练。。。打表找规律无所不能。 因为我们无法处理开方的取模问题,因此我们不能一步步求。我们令fn=⌊an−−√⌋f_n=\lfloor \sqrt{a_n} \rfloor,则打表看fnf_n的前几项,f2=31f_2=31 ,f3=197f_3=197 ,f4=1255f_4=1255 发现fnf_n符合类似于hnh_n

2017-08-25 23:21:15 488

原创 Codeforces 845B Luba And The Ticket (贪心)

题目链接CF 845B题目大意输入六位数字,问至少改变多少个数位能使前三位的和等于后三位的和。分析简单的贪心。 对于初始的六位数字,我们计算前三位的和与后三位的和,接着要让每次操作都尽可能多的填补前三位和与后三位和的差距。和较小的那一组中每一位最多能弥补的差距为9减去其数位(将其变大至9),和较大的那一组中每一位最多能弥补的差距为其数位(将其变为0),则按6个数位最多能弥补的差距排序,从大往小尽可

2017-08-24 23:19:32 623

原创 HDU 6166 Senior Pan (多源多汇最短路+集合的二进制划分 17多校第九场第6题)

题目链接HDU6166题目大意给定一个n个结点n个结点,mm条边的带边权有向图,(1≤n,m≤1051\le n,m\le10^5),从中选取kk个点,求中kk个结点中任意两点间最短路的最小值。分析假设答案的最短路径是从kk个结点中的ss点到tt点之间的最短路,则只要将kk个结点构成的集合划分成两个子集,使得ss在其中一子集,tt在另一子集,那么求出这两个子集之间的最短路就一定为答案。 那么就下来

2017-08-24 00:08:09 372

原创 HDU 6162 Ch’s gift (树的路径问题 DFS LCA 17多校第九场第2题)

题目链接HDU6162题意输入一棵n(nn(n≤\le105)10^5)个结点的无根树,ii号结点的权值为c[i]c[i]。有q(qq(q≤\le105)10^5)次查询,每次查询格式为:s,t,a,bs,t,a,b,求从ss号结点到tt结点的最短路径所经过的所有结点中权值在[a,b][a,b]范围内的权值和。分析这道题很容易想到暴力的做法: 先把无根树转化为有根树,DFS一遍确定各个结点

2017-08-23 19:47:28 274

原创 BZOJ 1588 营业额统计 (Splay入门题 插入 找前驱后继)

题目链接BZOJ1588题目大意输入nn个数(n≤32767n\le32767),每读入一个数,在前面输入的数中找到一个与该数相差最小的一个。把所有的差值加起来得到答案。分析我写的第一道Splay的题,基本就是对着大神的模板写。 每读入一个数就插入到伸展树中,然后将它旋转到根结点。跟它相差最小的点就是此时左子树中的最右边点和右子树中最左边点,映射到线性有序数组就是它的前驱结点和后驱结点。代码#in

2017-08-14 22:31:33 354

原创 Codeforces 839C Journey (树的DFS+期望)

题目链接CF 839C题目大意分析代码#include <bits/stdc++.h>using namespace std;const double pi=4*atan(1.0);const int MAXN=100010;const int MAXM=2*MAXN;struct Edge{ int to,next;}e[MAXM];int head[MAXN],ind[M

2017-08-13 01:05:48 379

原创 Codeforces 839B Game of the Rows (贪心)

题目链接CF 839B题目大意有kk组人,第ii组有aia_i个人。飞机上有nn排座位,每排座位如下图: 问是否存在一种就座方案,使得不存在不同组的人坐在相邻的位置。分析这是Round #428 (Div.2)的B题,当时比赛的时候是通过的,赛后被Hack掉了(新增数据见注释)。。。自己想的情况还是不够全面。 显然这是一道贪心题。首先我们尽可能的让同一组的4个人去坐四人座然后尽可能让同一

2017-08-13 01:03:20 303

原创 Codeforces 839A Arya and Bran (模拟)

题目链接CF 839A题目大意分析代码#include <bits/stdc++.h>using namespace std;const double pi=4*atan(1.0);int main(){ int a[110],n,k,i; while (scanf("%d%d",&n,&k)!=EOF) { for (i=1;i<=n;i++)

2017-08-13 01:01:33 300

原创 Codeforces 835B The number on the board (贪心)

题目链接CF 835B题目大意分析代码#include <bits/stdc++.h>using namespace std;int num[100010];int main(){ string ch; int k,ans,len,i,cnt,p,t; cin>>k; cin>>ch; len=ch.length(); cnt=0; f

2017-08-13 00:58:11 266

原创 Codeforces 835A Key races (水题)

题目链接CF 835A题目大意分析代码#include <bits/stdc++.h>using namespace std;int main(){ int s,v1,v2,t1,t2; while (scanf("%d%d%d%d%d",&s,&v1,&v2,&t1,&t2)!=EOF) { int a=s*v1+2*t1; int b

2017-08-13 00:55:09 220

原创 HDU 6112 今夕何夕 (日历题 Zeller公式 2017百度之星初赛A第五题)

题目链接HDU6112题目大意输入一个日期:YYYY-MM-DD 求接下来最近的哪一年里的同一个日子,和今天的星期数一样。分析应用Zeller公式,可以计算1582年10月4日后任一日期的星期。解决了这个问题后,只需枚举之后的每一年的同一日期,找到最近的星期数相同的即可。但这道题这样解的话要注意一个坑点,如果输入的日期为闰年的2月29号,不能直接+1枚举以后的年份,因为平年根本就没有2月29

2017-08-12 19:14:42 479

原创 HDU 6108 小C的倍数问题 (数论 2017百度之星初赛A第1题)

题目链接HDU6108题目大意给定进制P,求有多少个B满足P进制下,一个正整数是B的倍数的充分必要条件是每一位加起来的和是B的倍数。分析问题即求P-1有几个因子。证明待补。。。代码#include <bits/stdc++.h>using namespace std;int main(){ int T,p,i,cnt; scanf("%d",&T); while (T--

2017-08-12 19:00:54 322

原创 HDU 6105 Gameia (树上博弈 17多校赛第六场)

题目链接2017多校第六场1010题题目大意给定一个树,A可以选一个未染色结点染成白色 B有k次机会可以在任何时候切断一条连边,B可以选一个未染色结点染成黑色,同时和这个结点连接的点也会变成黑色(无论是白色还是未染色),本题是个无向图。最后还有白色的结点那么A赢否则B赢。 分析如果Bob能把这棵树分成若干两个一组的点对,那么Bob取得胜利,否则Alice获胜。 附官方题解: 代码#include

2017-08-11 23:20:03 270

原创 HDU 6013 Kirinriki (字符串反转+尺取法 17多校赛第六场)

题目链接2017多校第六场1008题题目大意定义两个长度相等且为nn的字符串a,ba,b之间的距离为disA,B=∑i=0n−1|Ai−Bn−1−i|dis_{A,B}=\sum_{i=0}^{n-1}\vert A_i-B_{n-1-i}\vert 给定一个字符串SS,请你从中找出两个互不相交子串,使得它们之间的距离小于mm且长度尽可能长,输出最大长度。T≤100,0≤m≤50000,0≤|S

2017-08-11 23:08:36 571

原创 HDU 6098 Inversion (思维 17多校第六场)

题目链接2017多校第六场1003题题目大意给定数组AA[] (n≤100000n\le100000),求Bi=maxAjB_i=maxA_j (j不是i的倍数),i≥2i\ge2 T≤20,Ai≤109,∑n≤700000T\le20,A_i\le10^9,\sum n\le700000 分析如果求每个BiB_i,我们都要去扫描一遍AA数组的话,那O(n2n^2)的复杂度肯定TLE。那么我们从

2017-08-11 19:34:15 187

原创 HDU 6106 Classes (简单集合运算 17多校第六场)

题目链接2017多校第六场1011题题目大意有A、B、C三门课,输入n个班级中分别选了A B C AB BC AC ABC课的人数,求n个班级中至少报名了1节课的人数的最大值。分析签到题。画韦恩图分析即可,要注意韦恩图每部分都得大于等于0。代码#include <iostream>#include <cstdio>using namespace std;int main(){ int

2017-08-11 18:53:21 186

原创 HDU 6070 Dirt Ratio(二分+线段树 17多校第四场)

题目大意 给定一个序列a[],让你求出一个子区间内不同元素个数除以区间长度的最小的一个值。n≤6∗104n\le 6*10^4 ,答案精度不高于10−410^{-4} 分析题目要求的是: min{dif[l][r]r−l+1}(1≤l≤r≤n,dif[l][r]表示区间[l,r]内不同元素的个数) min\{ \frac{dif[l][r]}{r-l+1}

2017-08-11 15:10:13 206

原创 HDU 6073 Matching In Multiplication (拓扑排序+搜索 求二分图所有完美匹配价值和)

题目链接2017多校第四场1007题目大意给定一个二分图,集合U和V各有n个点(n≤\le300000),集合U的每个点都连出两条边。保证至少有一个完美匹配。对于一个完美匹配,价值是边权之积,要求所有完美匹配的价值和。分析拿到这道题一开始就先从二分图匹配的算法去思考,但没想出来OTL。。。 其实可以换个角度思考。 如果一个点的度数为1的话,那么它的匹配方案肯定是固定的,因此我们可以先通过拓扑排序

2017-08-06 23:57:57 298

原创 HDU 2586 How far away (LCA模板题 树上点对间距离)

题目链接HDU2586题目大意给定一个n(n≤\le40000)个结点的带权无根树,有m(m≤\le200)个询问,询问两点之间的距离。分析一看到题目最直观的感觉是一个最短路问题,但看数据规模,如果对于每一次询问都跑一遍最短路,肯定TLE,因此不能这么做。 由于,它是n个结点,n-1条边的图,因此是一棵树,所以要往树的算法上思考。树上两点之间的距离就是两个点到它们最近公共祖先的距离之和,于是问题转

2017-08-04 15:44:29 356

原创 【专题】树的重心

定义及性质定义1:找到一个点,删除它得到的森林中最大的子树节点数最少,那么这个点就是这棵树的重心。 定义2:删除重心后得到的所有子树,其顶点树必然不超过n/2 性质1:树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么他们的距离和一样。 性质2:把两个树通过一条边相连得到一个新的树,那么新的树的重心在连接原来两个树的重心的路径上。 性质3:把一个树添加或删除一个叶子,

2017-08-04 14:36:37 762

原创 HDU 1402 A * B Problem Plus (大数乘法,FFT模板题)

题目链接HDU1402题意求两个长度为50000内的大数的乘积。分析本题为用FFT/NTT求多项式乘法的模板题。 大数乘法可以看成是多项式乘法的特例,大数的个位相当于0次项系数,十位相当于1次项系数…以此类推。代码因为这是我写FFT的第一道题,故用FFT和NTT都写一遍。 法1:FFT/**大数乘法,用FFT实现**/#include <iostream>#include <cstdio>

2017-08-02 01:32:54 346

原创 NEUOJ1207 Birthday present (简单数学)

题目链接2017ICPCECIC北方邀请赛D题代码#include <iostream>#include <cstdio>#include <cstring>const int INF=0x3f3f3f3f;const int MAXN=1000010;using namespace std;int p[MAXN];int main(){ int n,k,i,mina,ans

2017-08-01 00:00:34 216

原创 NEUOJ 1211 MJF wants to work (与区间相关的贪心)

题目链接2017ICPCECIC H题题目大意分析代码/*有n件工*/#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>const int INF=0x3F3F3F3F;const int MAXN=200005;using namespace std;struct Dot{

2017-07-31 23:55:35 320

原创 NEUOJ1212 Coach's plan (二分答案+二分图匹配)

题目链接2017ICPCECIC北方邀请赛I题题目大意有n个学生,m台电脑,每个学生使用每台电脑都对应一个适合值,现在让你给每个学生分配一台电脑(每台电脑仅可以分配给一个学生),问这些学生中最小的适合值最大是多少。分析最小值最大化问题,很容易想到二分答案,于是最优化问题就转换为判定性问题:即能否给每个学生分配一台电脑(每台电脑仅可以分配给一个学生)且每对人机的适合值都大于等于mid。 这种分配问题

2017-07-31 23:50:23 410

原创 HDU 2544 最短路 (模板题)

Dijkstra+邻接表+优先队列#include <iostream>#include <cstring>#include <queue>using namespace std;const int MAXN=110;const int MAXM=10010;const int INF=99999999;int edgenum=0,n,m,head[MAXN],book[MAXN];

2017-04-26 17:29:06 294

原创 POJ 2253 Frogger (单源最短路变型 求路径上最大边权值的最小值)

题目链接POJ2253题目大意输入N(2≤\leN≤\le200)个点的坐标,任意两点可以互相到达,经过的距离为它们的欧式距离。现在从1号点到2号点有多条路径,求这些路径中最大边权值的最小值。分析这题为单源最短路的变型题。 首先建图,由于点较少,用邻接矩阵即可,任意两点间建立无向边,权值为它们之间的欧式距离。 最原始的单源最短路问题可以求起点到终点间每条路径各自的权值和的最小值,而这道题是每条路

2017-04-26 17:01:11 2134

原创 POJ 1125 Stockbroker Grapevine (多源最短路Floyd)

题目链接POJ1125题目大意有N个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径。现在有一个消息要由某个人开始传递给其他所有人,问应该由哪一个人来传递,才能在最短时间内让所有人都接收到消息。若不存在这样一个人,则输出disjoint。分析多源最短路问题,用Floyd算法解决。 对于每个结点,若它到其他每个结点的最短路均为有限值,则它可以用来传播消息,传播消息的所需的时间为最后一个知道

2017-04-26 01:20:32 290

原创 POJ 1860 Currency Exchange (BellmanFord算法逆用 判断图是否存在正环)

题目链接POJ1860题目大意有N(1≤\leN≤\le100)种货币(标号1到N),M种货币的两两兑换法则(包括汇率r和手续费c),具体的法则是:当你用100A币交换B币时,A到B的汇率是29.75,手续费是0.39,那么你可以得到(100 - 0.39) * 29.75 = 2963.3975 B币。现在一个人手头有S型号货币,量为V,问他能否经过交换最终得到S型号货币且数额增加(交易过程中货币

2017-04-26 01:10:32 321

原创 POJ 3259 Wormholes (BellmanFord判断图是否存在负环)

题目链接POJ3259题目大意输入一个图,有N(1≤\leN≤\le500)个结点,M(1≤\leM≤\le2500)条正权无向边,W(1≤\leW≤\le200)条负权单向边,判断这个图中是否存在负权回路。分析判断图是否存在负环的模板题。 用Bellman-Ford算法,对所有边进行N-1轮松弛,如果之后还能继续进行松弛,则存在负权回路。#include <iostream>#include

2017-04-26 00:30:18 531

原创 POJ 3268 Silver Cow Party (单源最短路Dijkstra+反向构图)

题目链接POJ3268题目大意给定一个有N(1≤\leN≤\le1000)个结点、M(1≤\leM≤\le10510^5)条单向边的有向正权图,求每个结点出发到X号结点再回来到初始位置的花费的最小值。分析对于每个结点,要在它与X号结点之间走一个来回花费最小,必定它到X要走最短路,从X回到它也要走最短路。 返回的最短路好解决,即X号结点出发到其他结点的单源最短路,用Dijkstra算法跑一遍即可。现

2017-04-26 00:17:22 504

原创 POJ 2777 Count Color (线段树 区间覆盖染色问题)

题目链接POJ2777题目大意有一条长度为n(n≤\le10510^5)的数轴,有T(T≤\le30)种颜色,有m个操作(m≤\le10510^5),操作有以下两种:C a b c:把a与中间染成c色P a b:查询a与b中间有几种颜色数轴的初始颜色为1注意:a有可能大于b分析这是一道典型的区间覆盖问题,可以用线段树来解决。我们用线段树数组col[]记录区间的颜色信息,若某个区间下含有多种颜色,则

2017-04-16 01:11:27 875

原创 POJ 2828 Buy Tickets (线段树 单点更新-查找第k大元素)

题目链接POJ2828题目大意火车站有n(n≤\le200000)个人要排队,它们是按顺序到达,到达后要插队,现在告诉你每个人每次插队排在当前队伍第几个人的后面以及它们的权值,输出最终队伍的权值序列。分析按照题意,每个人插队时的位置都是相对那个时候的队伍状态而言的,因此是动态变化,但是经过分析我们可以发现,最后一个人的位置是一定确定的,因此我们可以倒序考虑每个人的插队,依次确定每个人的位置。举个栗子

2017-04-15 00:31:13 409

原创 POJ 2528 Mayor's posters (线段树 区间更新+离散化 经典染色问题)

题目链接POJ2528题目大意给定一条数轴,长度为10710^7,然后在数轴上的某些区间染色,第i次对区间染色为i,共染色n(n≤\le10510^5)次。给出每次染色的区间,问最后能看见多少种颜色. 分析这是我写的第一道离散化的题啊!虽然以前知道有这种技巧,但一直没有亲手写过题,通过这道题掌握了离散化的思想以及用STL的实现离散化的方法。 1.这道题为什么要离散化? 这道题数轴的长度

2017-04-14 00:52:29 507

原创 POJ 3468 A Simple Problem with Integers (线段树区间更新模板题)

题目链接POJ3468题目大意给N个数,Q个操作(1 ≤ N,Q ≤ 100000) 有两种操作: 1.”C a b c”:Aa, Aa+1, … , Ab都加c 2.”Q a b”:求Aa, Aa+1, … , Ab的和分析线段树区间更新模板题。代码#include <iostream>#include <cstring>#include <string>#define LL long

2017-04-10 21:39:10 287

原创 HDU 1166 敌兵布阵 (线段树点更新模板题)

题目链接HDU1166题目大意有N个(N<=50000)工兵营地,有N个工兵营地开始时有ai个人(1<=ai<=50)。有以下四种命令: (1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30) (2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30); (3)Query i j ,i和j为正整数,i<=j,表示询问第i到第j个营地的总人数;

2017-04-10 21:33:15 208

空空如也

空空如也

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

TA关注的人

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