
暑期集训刷题算法复习(新手 )
文章平均质量分 92
Dave_L
这个作者很懒,什么都没留下…
展开
-
和为k的连续区间(mp+前缀和) 51nod1094
#include using namespace std;const int MAX_VALUE = 1e4+5;int n,k;mapmp; long long a[MAX_VALUE]; long long s[MAX_VALUE];int main(){ scanf("%d%d",&n,&k); memset(s,0,sizeof(s)); for(int i=1;原创 2017-06-30 13:28:30 · 588 阅读 · 0 评论 -
只包含因子2 3 5的数 51nod1010
#include using namespace std;const long long maxn = 1e18+888;long long a[100000]; int T; long long N; long long mx = maxn; int z = 0;void binarySearch(){ int left = 1,right = z-1; while原创 2017-06-30 15:54:14 · 587 阅读 · 0 评论 -
CF-731c
//并查集把颜色要相同的下标放在同一集合中,贪心:找到每个集合中出现最多的颜色 把该集合中剩下的颜色变为该颜色#include using namespace std;const int AX = 2e5+666;int a[AX], pre[AX];vectorp[AX];int gather[AX];long long sum = 0;int find(int x){原创 2017-07-10 20:04:29 · 478 阅读 · 0 评论 -
4个数和为0
#include #include #include #include using namespace std;int N;int a[2000];struct Node{ int x; int y; long long sum;}site[1000100]; //数组开大。。不然时间超限bool cmp(const Node &a,const Node &b){ r原创 2017-06-30 18:53:05 · 381 阅读 · 0 评论 -
51nod 1212
include #define INF 123456using namespace std;const int MAXN = 5e4+666;int n,m;int vis[MAXN];int mp[1200][1200];int dist[MAXN],sum;int prime(int cur){ int index,mincost; sum = 0;原创 2017-07-02 17:01:44 · 287 阅读 · 0 评论 -
Trie树
参考:http://blog.youkuaiyun.com/hackbuteer1/article/details/7964147#reply知识简介 字典树(Trie)可以保存一些字符串->值的对应关系。基本上,它跟 Java 的 HashMap 功能相同,都是 key-value 映射,只不过 Trie 的 key 只能是字符串。 Trie 的强大之处就在于它的时间原创 2017-07-03 10:53:25 · 302 阅读 · 0 评论 -
枚举二分hdu2199
#include #include #include #include #include #include #define INF 1e-6#define MIN 1e-7using namespace std;int p,q;double fun(double x){ return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;}int main()原创 2017-07-03 18:20:04 · 342 阅读 · 0 评论 -
UVA10341 二分枚举解方程
#include #include #include #include #include #include #define INF 1e-14#define MIN 1e-14 //精度using namespace std;double p,q,r,s,t,u;double fun(double x){ return p*exp(-x)+q*sin(x)原创 2017-07-03 18:58:26 · 337 阅读 · 0 评论 -
UVA12050
#include #include using namespace std;#define MAX_BIT 20// ans数组记录答案,下标从1开始int bit_num[MAX_BIT + 2],n,ans[MAX_BIT + 2];void set_bitnum(){ //计算并储存每个位次(是一位,两位还是多少位数)的数字有几个。exm:1位的1,2,3,4原创 2017-07-03 19:17:34 · 323 阅读 · 0 评论 -
hdu 1671
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1671#include using namespace std;const int AX = 1e4+6;int q;typedef struct Trie_node{ int count; struct Trie_node* next[11]; bool exist;}TrieNo原创 2017-07-04 15:51:52 · 338 阅读 · 0 评论 -
CF-608B 前缀和
#include using namespace std; //先贴下我的62ms const int MAXN = 200000+666;char a[MAXN];char b[MAXN];int pre[MAXN]; int main(){ cin>>a>>b; int la = strlen(a); int lb =原创 2017-07-05 18:18:03 · 379 阅读 · 0 评论 -
UVA10282 字符串输入问题
#include #include #include using namespace std;mapmp;int main(){ char s[100]; /*while(getline(cin,s)){ //方法1 if(s.length()==0){ break; } int blank = s.find(' '); string b =原创 2017-07-05 16:00:55 · 336 阅读 · 0 评论 -
UVA 10382区间覆盖
n sprinklers are installed in a horizontal strip of grass l meters long and w meters wide. Each sprinkler is installed at the horizontal center line of the strip. For each sprinkler we are given its p原创 2017-07-15 09:59:24 · 403 阅读 · 0 评论 -
HDU 1728
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1728普通迷宫增加转弯次数,不知道怎么限制转弯次数,只好按照转一个方向增加一次转弯一搜到底了。。#include //78ms#include #include using namespace std;int n,m;const int INF = 1e5+666原创 2017-07-06 10:44:40 · 355 阅读 · 0 评论 -
最大子段和
原文:http://blog.youkuaiyun.com/niteip/article/details/7444973动态规划思想:令b[j]表示以位置 j 为终点的所有子区间中和最大的一个 子问题:如j为终点的最大子区间包含了位置j-1,则以j-1为终点的最大子区间必然包括在其中如果b[j-1] >0, 那么显然b[j] = b[j-1] + a[j],用之前最大的一个加上a[j]原创 2017-07-06 17:12:55 · 302 阅读 · 0 评论 -
hdu1087 动态规划入门LIS
#include using namespace std;const int AX = 2e3+666;int mp[AX];int dp[AX];int main(){ int n; while(scanf("%d",&n) && n){ memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++){ cin>>mp[i]; } int原创 2017-07-06 20:40:28 · 403 阅读 · 0 评论 -
最长递增子序列
解法一:最长公共子序列(LCS)+sort排序:复制整数序列,然后排序,求排序过的和未排序的最长公共子序列(只能在题目要求低,序列短才能用。。不然空间太大了)#include //不知道对不对。。。没找到要求低的oj题,只测了几个数据using namespace std;const int maxn = 2000+6; int b[maxn][maxn]; in原创 2017-07-07 16:35:44 · 216 阅读 · 0 评论 -
51NOD1119
M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。Input第1行,2个数M,N,中间用空格隔开。(2 <= m,n <= 1000000)Output输出走法的数量 Mod 10^9 + 7。Input示例2 3Output示例3 #in...原创 2017-07-30 14:10:43 · 319 阅读 · 0 评论 -
51nod1120 卡特兰数+Lucas定理
1120机器人走方格 V3基准时间限制:1 秒 空间限制:131072 KB 分值:80难度:5级算法题 收藏 关注 取消关注N * N的方格,从左上到右下画一条线。一个机器人从左上走到右下,只能向右或向下走。并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果。原创 2017-07-30 16:06:33 · 597 阅读 · 0 评论 -
E - Contestants Ranking
StatementsAhmad is one of the best students in HIAST, and also a very good problems Solver. In the time you will spend reading this problem statement Ahmad would have solved a problem. Maybe, even原创 2017-07-17 21:30:10 · 794 阅读 · 1 评论 -
最长回文字串 Manacher算法 时间复杂度O(N) + 最长回文子序列
这个图很经典解释也很清楚了,但是我开始看也看不懂。。实在太菜了。解释一下重点部分:if(p[id]+id>i) p[i]=min(p[2*id-i],p[id]+id-i); p[id]是以id为中心点的回文串的半径,当i在其范围内时,i的半径取值需要考虑其是否完全包含在id内,如果包含就直接取值;不包含的话,不包含的部分还未匹配因此只能取已知的。j是i关于id点的原创 2017-07-03 20:05:36 · 936 阅读 · 0 评论 -
LCA(dfs+st)在线算法
在线算法DFS+ST描述(思想是:将树看成一个无向图,u和v的公共祖先一定在u与v之间的最短路径上):(1)DFS:从树T的根开始,进行深度优先遍历(将树T看成一个无向图),并记录下每次到达的顶点。第一个的结点是root(T),每经过一条边都记录它的端点。由于每条边恰好经过2次,因此一共记录了2n-1个结点,用E[1, ... , 2n-1]来表示。(2)计算R:用R[i]表示E数组中第一原创 2017-07-22 09:06:48 · 716 阅读 · 0 评论 -
51nod1183编辑距离
1183编辑距离基准时间限制:1 秒 空间限制:131072 KB 分值:0难度:基础题 收藏 关注 取消关注编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitte原创 2017-07-31 14:46:16 · 367 阅读 · 0 评论 -
hihocoder1080
#1080 : 更为复杂的买卖房屋姿势时间限制:10000ms单点时限:1000ms内存限制:256MB描述小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们可以化身上帝模式,买卖房产。在这个游戏里,会不断的发生如下两种事件:一种是房屋自发的涨价或者降价,而另一种是政府有关部门针对房价的硬性调控。房价的变化原创 2017-07-22 17:26:38 · 332 阅读 · 0 评论 -
hihocoder1081
#1081 : 最短路径·一时间限制:10000ms单点时限:1000ms内存限制:256MB描述万圣节的早上,小Hi和小Ho在经历了一个小时的争论后,终于决定了如何度过这样有意义的一天——他们决定去闯鬼屋!在鬼屋门口排上了若干小时的队伍之后,刚刚进入鬼屋的小Hi和小Ho都颇饥饿,于是他们决定利用进门前领到的地图,找到一条通往终点的最短路原创 2017-07-22 18:58:56 · 476 阅读 · 0 评论 -
hihocoder1089
#1089 : 最短路径·二:Floyd算法时间限制:10000ms单点时限:1000ms内存限制:256MB描述万圣节的中午,小Hi和小Ho在吃过中饭之后,来到了一个新的鬼屋!鬼屋中一共有N个地点,分别编号为1..N,这N个地点之间互相有一些道路连通,两个地点之间可能有多条道路连通,但是并不存在一条两端都是同一个地点的道路。由于没有原创 2017-07-22 19:33:43 · 393 阅读 · 0 评论 -
hihocoder1093 SPFA算法模板
一:背景SPFA(Shortest Path Faster Algorithm)算法,是西南交通大学段凡丁于 1994 年发表的,其在 Bellman-ford 算法的基础上加上一个队列优化,减少了冗余的松弛操作,是一种高效的最短路算法。二:算法过程设立一个队列用来保存待优化的顶点,优化时每次取出队首顶点 u,并且用 u 点当前的最短路径估计值dist[u]对与 u 点邻接的顶点原创 2017-07-22 21:23:05 · 414 阅读 · 0 评论 -
Dijkstra floyd算法
参考:Dijkstra算法1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。问题描述:在无向图 G=(V原创 2017-07-02 11:56:58 · 510 阅读 · 0 评论 -
51nod1264 线段相交
给出的数据应该不包含在一条线上,下面的程序也过不了那样的数据。#include using namespace std;struct point{ double x,y;}p[4];double f(point a,point b,point c){ return (a.x - c.x)*(b.y - c.y)-(a.y - c.y)*(b.x - c.x);}b原创 2017-07-31 20:00:01 · 353 阅读 · 0 评论 -
普利姆(Prim)算法
参考:http://blog.youkuaiyun.com/niushuai666/article/details/6689295普利姆(Prime)算法(只与顶点相关)算法描述:普利姆算法求最小生成树时候,和边数无关,只和定点的数量相关,所以适合求稠密网的最小生成树,时间复杂度为O(n*n)。算法过程:1.将一个图的顶点分为两部分,一部分是最小生成树中的结点(A原创 2017-07-02 17:10:31 · 1132 阅读 · 0 评论 -
Kruscal算法
参考:http://blog.youkuaiyun.com/luomingjun12315/article/details/47700237Kruskal算法 Kruskal算法是基于贪心的思想得到的。首先我们把所有的边按照权值先从小到大排列,接着按照顺序选取每条边,如果这条边的两个端点不属于同一集合,那么就将它们合并,直到所有的点都属于同一个集合为止。至于怎么合并到一个集合,那原创 2017-07-23 15:34:29 · 1370 阅读 · 0 评论 -
玲珑#19 A 数论打表 B RMQ+二分
A: http://www.ifrog.cc/acm/problem/1145#include using namespace std;int main(){ int n; while(~scanf("%d",&n)){ int m = n; int num; if( m >=1 && m<=10 ){ num = 0; }else if(m <= 99)原创 2017-07-31 10:33:38 · 323 阅读 · 0 评论 -
RMQ
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j一种比较高效的在线算法(ST算法),是指用户每输入一个查询便马上处理一个查询。该算法一般用较长的时间做预处理,待信息充足以后便可以用较少的时间回答每个查询。ST(Sparse Table)算法是原创 2017-07-21 15:48:40 · 306 阅读 · 0 评论 -
全排列问题 以51nod1384为例(字典序且重复)
参考:http://blog.youkuaiyun.com/laojiu_/article/details/511153521.非字典序:首先是非字典序不能重复的递归实现:以 1 , 2 , 3 , 4 为例 , 想要得到全排列,必定是 先以 一个数字开头,然后求剩下数字的全排列:以 1 开头,下面跟着 {2, 3, 4} 的全排列;以 2 开头,下面跟着 {1, 3, 4}原创 2017-08-01 10:21:22 · 705 阅读 · 0 评论 -
61E - Enemy is weak (树状数组)
E. Enemy is weaktime limit per test5 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputThe Romans have attacked again. This time they are m原创 2017-07-12 16:46:10 · 482 阅读 · 0 评论 -
POJ2481 树状数组+sort
CowsTime Limit: 3000MS Memory Limit: 65536KTotal Submissions: 19096 Accepted: 6450DescriptionFarmer John's cows have discovered that the clover growing along the ri原创 2017-07-12 10:32:09 · 263 阅读 · 0 评论 -
树状数组的应用
SonochiSonochi,明年再一起看烟花。——WashioSumiWashioSumi为了实现和SonochiSonochi的约定,WashiWashi必须要打败眼前强大的怪物。怪物分布在二维平面上, 某个怪物的rankrank被定义为xx坐标不大于其xx坐标,且yy坐标不大于其yy坐标的怪物的数量。(不含其自身)WashiWashi要你输出nn行,每行一个整数,原创 2017-07-10 20:07:49 · 388 阅读 · 0 评论 -
树状数组的应用
树状数组的应用1:求逆序数-首先考虑将输入数组离散化,因为题目要求输入的数值可以达到10的9次方,肯定不会开出那么大的数组。1.定义一个结构体 val保存原值,pos保存原来在数组中的位置2.在对原结构体数组对val值排序3.定义保存离散化数据的数组flect,flect[node[i].pos] = i;eg: 位置 : 1 2 3 4 5 原...原创 2017-07-08 09:54:33 · 425 阅读 · 0 评论 -
51NOD1459 迷宫游戏
1459迷宫游戏基准时间限制:1 秒 空间限制:131072 KB 分值:0难度:基础题你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分数。还有若干双向道路连结这些房间,你沿着这些道路从一个房间走到另外一个房间需要一些时间。游戏规定了你的起点和终点房间,你首要目标是从起点尽快到达终点,在满足首要目标的原创 2017-08-01 15:32:13 · 330 阅读 · 0 评论 -
Codeforces Round #425 (Div. 2) D. Misha, Grisha and Underground 最近公共祖先
D. Misha, Grisha and Undergroundtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputMisha and Grisha are funny boys, so原创 2017-08-08 15:41:18 · 393 阅读 · 0 评论