算法
Draven__
这个作者很懒,什么都没留下…
展开
-
I - Paths and Trees(迪杰斯特拉)
点击打开链接大晚上的打代码确实挺心累的,本来想这题搞完就睡,没想到搞了好久题目将从某点出发的所有最短路方案中,选择边权和最小的最短路方案,称为最短生成树。题目要求一颗最短生成树,输出总边权和与选取边的编号。1.测试数据比较强 最大值要放很大 const ll inf=0x7fffffffffffff;(13个) typedef pair P;2原创 2017-07-16 23:12:45 · 277 阅读 · 0 评论 -
The Tower of Babylon (DAG最长路算法模板)
点击打开链接 DAG图:在图论中,如果一个有向图无法从某个顶点出发经过若干条边回到该点,则这个图是一个有向无环图(DAG图)。题意有n种长宽高为x,y,z的砖头,每种都有无数个。砖头可以用不同姿势的方向来盖。砖头a以某种姿势可以盖在砖头b上,当且仅当a的底部的长宽都要比b的底部长宽要小。问最高可以建多高?思路对于一个x,y,z砖头,它可以有3中姿势放置...原创 2017-08-20 21:34:45 · 1696 阅读 · 0 评论 -
Lazy Running(dijkstra+取模)
点击打开链接取w=\min(d_{1,2},d_{2,3})w=min(d1,2,d2,3),那么对于每一种方案,均可以通过往返跑ww这条边使得距离增加2w2w。也就是说,如果存在距离为kk的方案,那么必然存在距离为k+2wk+2w的方案。设dis_{i,j}disi,j表示从起点出发到达ii,距离模2w2w为jj时的最短路,那么根据dis_{2,j}dis2,j...原创 2017-08-06 19:48:47 · 475 阅读 · 0 评论 -
小小粉丝度度熊(尺取法)
“尺取法”这种方法就是利用两个下标(起点,终点 )的不断放缩像虫子伸缩爬行一样来卡出一个最优解。这种算法由于只需遍历一遍就可以求出答案,所以时间复杂度就是O(n)。下面给出该算法的伪代码和思路:void worm_solve() { int res=MAX; int s=0,t=0,sum=0; for(;;) { ...原创 2017-08-14 16:35:39 · 502 阅读 · 0 评论 -
One-Way Reform(欧拉回路)
题意:n个点m条边的无向连通图 ,没有自环没有重边 ,我们要把所有点都定向,希望使得尽可能多的点拥有相同的入度与出度让你输出满足这个条件的最大点数和每条边最后的定向欧拉回路有如下定理:1.D为有向图,D的基图连通,并且所有顶点的出度与入度都相等;或者除两个顶点外,其余顶点的出度与入度都相等,而这两个顶点中一个顶点的出度与入度之差为1,另一个顶点的出度与入度之差...原创 2017-08-07 13:16:35 · 400 阅读 · 0 评论 -
迪杰斯特拉算法模板
struct Dijkstra{ int n,m;//顶点从0开始标号 vector<Edge> edges; vector<int> G[N]; bool done[N]; int d[N],p[N]; void init(int n){//用之前先初始化 this->n=n; ...原创 2017-08-22 15:19:47 · 320 阅读 · 0 评论 -
Jin Ge Jin Qu hao (01背包学习 紫薯)
点击打开链接其实本题本质上就是一个标准的01背包问题.问你<=t-1时间内最多可以选择哪些歌曲使得(数据1,数据2)最优. 这里的数据1是歌曲数目,数据2是歌曲总时长, 且数据1优先.我们令dp[i][j]==x 表示当决策完全前i个物品后(选或不选), 所选的总歌曲时长<=j时, 所得到的最优状态为x. (这里的x就不是平时我们所说的最长时间或最多歌曲数目了)但...原创 2017-08-23 13:22:26 · 367 阅读 · 0 评论 -
fastio
namespace fastIO{ #define BUF_SIZE 100000 #define OUT_SIZE 100000 #define ll long long //fread->read bool IOerror=0; inline char nc(){ static char buf[BUF_SIZE],*p1...原创 2017-08-24 15:35:34 · 1732 阅读 · 0 评论 -
Guess (浮点数,高精度)
点击打开链接题意:有 n 位选手参加编程比赛。比赛有3道题目,每个选手的每道题目都有一个评测之前的预得分(这个分数和选手提交程序的时间相关,提交的越早,预得分越大)。接下来 是系统评测。如果某道题未通过测试,则改题的实际得分为0分,否则得分等于预得分。得分相同的选手,ID小的排在前面。问是否能给出所有3n个得分以及最后的实际名次。如果可能,输出最后一名的最高可能得分。每个预得分均为小于10...原创 2017-08-17 15:15:35 · 890 阅读 · 0 评论 -
Chess(组合数公式)
点击打开链接想增加一个条件:对于任何一个車A,如果有其他一个車B在它的上方(車B行号小于車A),那么車A必须在車B的右边(車A列号大于車B)。那么对于输入的棋盘长宽为 n,m时,最多能放min(n,m)个,最多能放的位置有max(n,m)个。那么就是组合数C[n][m]组合恒等式:若表示在n个物品中选取m个物品,则如存在下述公式: C(n,m)= C(n,n-m)= C(n-1,m...原创 2017-08-13 21:16:20 · 1001 阅读 · 0 评论 -
今夕何夕(闰年)(模拟)
点击打开链接题意:接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日。下一个也是星期日的8月6日发生在2023年。思路:要想日期一样,天数必须一年一年加,枚举天数,每一年的天数加起来mod7==0,那么就找到了答案。但是这里应该注意为闰年的情况。闰年且为2月29日的情况只能在闰年取得。如果闰年日期在2月29日之后,那么当前的年份天数只算365,否则算3...原创 2017-08-12 23:46:50 · 673 阅读 · 0 评论 -
Mindis(圆的反演变换)
题意:圆心 O 坐标(0, 0), 给定两点 P, Q(不在圆外),满足 PO = QO, 要在圆上找一点 D,使得 PD + QD 取到最小值。官方题解:做P点关于圆的反演点P',OPD与ODP'相似,相似比是|OP| : r。Q点同理。极小化PD+QD可以转化为极小化P'D+Q'D。当P'Q'与圆有交点时,答案为两点距离,否则最优值在中垂线上取到。时间复杂度...原创 2017-08-11 18:34:25 · 1251 阅读 · 0 评论 -
Rikka with Candies(bitset操作)
题意:A数组n个数,B数组m个数,q个查询, 每次给出一个k,询问有多少对(i,j), 使得Ai % Bj = k, 输出对数对模2的值这道题可以用bitset来做,bitset与数组类似,但其中每一位只能为0或1,用来存储2进制的每一位用整值类型将第27 位设置为1, 我们这样写quiz1 |= 1<<27;而用bitset 来做我们可以写quizl[ 27 ] = ...原创 2017-08-09 16:44:13 · 570 阅读 · 0 评论 -
RXD and math(莫比乌斯函数,快速幂)
RXD is a good mathematician.One day he wants to calculate:∑i=1nkμ2(i)×⌊nki−−−√⌋output the answer module109+7.1≤n,k≤1018μ(n)=1(n=1)μ(n)=(−1)k(n=p1p2…pk)μ(n)=0(otherwise)p1,p2,p3…...原创 2017-08-07 17:04:54 · 452 阅读 · 0 评论 -
Kanade's sum(链表优化)
Kanade's sumTime Limit: 4000/2000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2017Accepted Submission(s): 813Problem DescriptionGive you an ar...原创 2017-08-02 20:37:47 · 401 阅读 · 0 评论 -
F - k-Tree (dp,递归)
给定一个k叉树,且是无限有根树,每个节点有k个孩子,从左向右依次编号为1,2,3,...k,每条边有权值,节点连向i号孩子的边的权值为i,问:从根节点开始向下走,有多少条路径满足要求:该路径权值为n,且路径上至少有一条边的权值大于等于ddp[i]:权值为i的路径的条数。dp2[i]:权值为i的,且路径上的权值都小于d的路径条数。利用了递归的思想,当dp[i-j] (i-j&g...原创 2017-07-18 10:55:09 · 554 阅读 · 0 评论 -
Balala Power!
题意:给你n个由小写字母组成的字符串,让你给26个字母分配0-25,每个字符串形成一个26进制的数字,问怎么分配权值这n个数的和最大。(不能有前导0,但是单个0可以)题解:每个字符对答案的贡献都可以看作一个 26 进制的数字,问题相当于要给这些贡献加一个 0 到 25 的权重使得答案最大。最大的数匹配 25,次大的数匹配 24,依次类推。排序后这样依次贪心即可,唯一注意的是不能出现转载 2017-07-28 13:15:16 · 291 阅读 · 0 评论 -
E - Anton and Tree(dfs缩点+dfs找最长直径)
题意:给出n个点,n-1条边构成一棵生成树,每个点都有黑白两种颜色,每次改变颜色都能使同颜色的相邻点改变颜色,求最小改变颜色的次数分析:因为每次改变颜色都能使同颜色的相邻点改变颜色,所以相邻且颜色相同的点可以缩成一点,重新建图,构成黑白相间的点的树,设树的直径(任意两点的最远距离)为d,因为每次改变颜色都会使它与相邻的点的颜色相同,所以取树的直径上的点操作,共有d+1个点,因为点是黑白相间的,...原创 2017-07-26 14:40:07 · 373 阅读 · 0 评论 -
D - Balance(01背包)
点击打开链接这是一道01背包的题目题意:有一个天平,左臂右臂各长15,然后给出n,m,n代表有几个挂钩,挂钩给出负数代表在左臂的距离,正数则在右臂m代表有m个砝码,要你求出使得这个天平保持平衡有几种方法,要求所有砝码全部使用完dp[i][j] i用来判断第i个砝码是否要放, j代表平衡位子由于下标不能为0 15*20*20=7500所以平衡位子为7500c[i] 代表位子 w[i]原创 2017-07-16 10:11:41 · 303 阅读 · 0 评论 -
J - Pashmak and Parmida's problem(树状数组)(逆序对)
点击打开链接给你n个整数a1, a2, …, an。 可以定义一个函数f(l,r,x), 能范围在区间[l, r]范围内,有多少个数字等于x。公式化的说: 统计满足lf(j,n,aj)。 就是一个求逆序对的问题,只不过逆序对的值换成了l,r内与f[ai]相同的值的个数分别用两个数组来存正着遍历和反着遍历到该点时前面元素与该元素相同的个数然后就是算有多少个f(1,i,ai)>f(原创 2017-07-17 14:48:44 · 312 阅读 · 0 评论 -
B - Almost Sorted Array (最长上升子序列o(nlogn))
点击打开链接给你一些序列,判断是否接近上升序列或者下降序列#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define N 100005#define exp 1e-10usin原创 2017-07-17 15:32:04 · 355 阅读 · 0 评论 -
E - Arpa's weak amphitheater and Mehrdad's valuable Hoses (分组背包)
分组背包,话说有很多的小姐姐,每个都有她们的体重和颜值,小姐姐们分成一个个团体,现在让你来选,考虑到面子问题,每组小姐姐要么只能选一个要么全选,舞台能承受的重量是固定的。先用并查集把输入的人分组,然后在放到vector<int > 中#include <iostream>#include<algorithm>#include<vector...原创 2017-07-18 09:47:49 · 314 阅读 · 0 评论 -
H - Just a Hook (线段树模板)
点击打开链接先推荐一个介绍线段树的博客点击打开链接题意是一条边有n个点,每次更新 更改,注意是更改每个点的值,套模板的时候,套成了增加z的值,结果搞了半天主要当时还是没有理解,线段树节省时间,最关键就是有一个延迟标记,到了要求和了,或者修改这个值了,才把这个延迟标记传下去。#include <cstdio>#include <algorithm>...原创 2017-07-18 21:40:21 · 246 阅读 · 0 评论 -
F - Anti-Rhyme Pairs(rmq算法模板)(后缀数组算法模板)
点击打开链接题目大意:通常押韵的两个词以相同的字符结尾。我们运用这个特性来规定反押韵的概念。反押韵是一对拥有近似开头的单词。一对单词的反押韵的复杂度被定义为两者都以之开头且最长的字符串S的长度。因此,"arboreal" 和"arturus"是复杂度为2的一对反押韵,且"chalkboard"和"overboard"是一对复杂度为0的反押韵。你将得到一列单词。你的任务是,得到一列(i,j)形式...原创 2017-07-31 13:30:54 · 438 阅读 · 0 评论 -
J - GCD(rmq+二分)
点击打开链接题目大概说给一个包含n个数的序列,多次询问有多少个区间GCD值等于某个区间的gcd值。任何一个区间不同的GCD个数是log级别的,因为随着右端点向右延伸GCD是单调不增的,而每次递减GCD至少除以2。考虑固定左端点,最多就nlogn种GCD,可以直接把所有区间GCD值预处理出来,用map存储各种GCD值的个数,查询时直接输出。具体是这样处理的:枚举左端点,进行若干...转载 2017-07-31 20:32:17 · 291 阅读 · 0 评论 -
G - 2-3 Trees (dp)
点击打开链接求一个含有l个子节点的2,3树一共有多少种形态,对结果取余r因为我们知道最底层(叶子节点)的个数,所以我们可以向上推导,这n个叶子能组成多少个2孩子父节点和3孩子父节点,一层一层向上推导。同时每一层的2子父节点与3子父节点的排列也是造成形态多样的原因。所以 dp[n]=dp[n]+dfs(i+t)*c[i+t][t]dfs(i+t)表示子节点数为i+t的种类原创 2017-07-23 16:04:18 · 485 阅读 · 0 评论 -
G - Mike and Feet(单调栈)
点击打开链接讲单调栈的博文点击打开链接给你一个区间里的每个数,求区间大小分别为1,2,3,4.....每个小区间的数中最小值,再求这些最小值中的最大值用单调栈可以在on内算出每个数的左边右边第一个小于这个数的值的位置然后int len=r[i]-l[i]+1,就可以算出区间长度为len的最小值考虑到有些区间长度可能并不会出现,根据res[i-1]=max(res[i-1],r...原创 2017-07-19 21:59:37 · 383 阅读 · 0 评论 -
Broken robot (概率dp)
点击打开链接这是一道概率dp题目意思就是给你一个你n,m大小的方格,再给你输入当前位置,每次机器人只能向下,向左,向右移动一格,或者原地不动,类似于象棋里面小兵的移动。问平均需要多少次移动,能使机器人到达最后一行例如样例10 1010 4机器人已在最后一行,所以需要移动步数为0#include <iostream>#include <...原创 2017-07-24 13:32:49 · 563 阅读 · 0 评论 -
D - Fix a Tree (并查集+拆环)
题意: 已知有向树的定义,除了根节点外每个节点都有且仅有一条边都指向它的父亲节点,而根节点有且仅有一条边指向自己。 现在输入一张图,每个节点都有一条边指向某个点,要求修改尽量少的边,将这张图变成一颗树。\分析; 最终形成的树中一定只有根节点指向自己,并且除了根节点的自环外没有其他的环。 对于图中形成的一个环,我们只需要拆开一个点就能将这个环修改成一...原创 2017-07-24 23:21:40 · 363 阅读 · 0 评论 -
RXD and dividing
题意:给出一棵有n个顶点的树,然后将2~n号顶点分成k块,求1号顶点到分成k块后各个顶点的最大权值和。把1看成整棵树的根. 问题相当于把2\sim n2∼n每个点一个[1, k][1,k]的标号. 然后根据最小斯坦纳树的定义,(x, fa_x)(x,fax)这条边的贡献是 x 子树内不同标号的个数目dif_idifi. 那么显然有dif_i\leq min(k, sz_i)di...原创 2017-08-02 14:26:49 · 406 阅读 · 0 评论 -
E - Strategic Game (HDU - 1054 )(最小顶点覆盖)(匈牙利算法模板)(树形DP)
题意:鲍勃喜欢玩电脑游戏,特别是战略游戏,但有时他无法找到解决方案,速度不够快,那么他很伤心。现在,他有以下的问题。他必须捍卫一个中世纪的城市,形成了树的道路。他把战士的最低数量的节点上,使他们可以观察所有的边。你能帮助他吗?士兵,鲍勃把一个给定的树,你的程序应该发现的最小数目。输入文件包含多个数据集的文本格式。我们来先了解一下什么是最小顶点覆盖;图G的顶点覆盖是一个顶点集合V,使得...原创 2017-08-09 10:48:56 · 1342 阅读 · 0 评论 -
A - 最长回文(马拉车算法模板)(回文串)
点击打开链接http://blog.csdn.net/dyx404514/article/details/42061017Manacher算法提供了一种巧妙地办法,将长度为奇数的回文串和长度为偶数的回文串一起考虑,具体做法是,在原字符串的每个相邻两个字符中间插入一个分隔符,同时在首尾也要添加一个分隔符,这样不论原串是积还是偶,都变成奇数来考虑Len数组有一个性质,那就是Len[i]-1...转载 2017-08-03 16:25:09 · 522 阅读 · 0 评论 -
Bookshelf 2(01背包)(深搜)
点击打开链接有n头牛,已知每头牛的高度和书架高度,一头牛可以站在另一头牛身上,总高度是他们的高度之和。要求能够达到书架的顶端,即这些牛的总高度不低于书架高度,求满足条件的总高度的最小值,输出他们的差值。把牛能到达的总高度看做背包容量,dp[i] 表示在不超过i高度下牛所能达到的最大高度然后最后遍历一遍得到答案#include<stdio.h>#include&...原创 2017-07-17 16:06:11 · 532 阅读 · 0 评论