姗姗杯
Draven__
这个作者很懒,什么都没留下…
展开
-
A - "Or" Game
点击打开链接题意:一组数共有k次机会对某个ai乘上x,问 或运算的值最大是多少或运算的两个基本性质 a|b>=max(a,b) a|0=a 对于两个数 a>b 则有2a|b >= 2b|a 即二进制位数越长或运算越大预处理一下用p[i]表示前i个值的或运算q[i]表示后i个#includeusing namespace std;long long n,k,x原创 2017-07-13 13:47:14 · 238 阅读 · 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 · 253 阅读 · 0 评论 -
F - Anti-Rhyme Pairs(rmq算法模板)(后缀数组算法模板)
点击打开链接题目大意:通常押韵的两个词以相同的字符结尾。我们运用这个特性来规定反押韵的概念。反押韵是一对拥有近似开头的单词。一对单词的反押韵的复杂度被定义为两者都以之开头且最长的字符串S的长度。因此,"arboreal" 和"arturus"是复杂度为2的一对反押韵,且"chalkboard"和"overboard"是一对复杂度为0的反押韵。你将得到一列单词。你的任务是,得到一列(i,j)形式...原创 2017-07-31 13:30:54 · 442 阅读 · 0 评论 -
J - GCD(rmq+二分)
点击打开链接题目大概说给一个包含n个数的序列,多次询问有多少个区间GCD值等于某个区间的gcd值。任何一个区间不同的GCD个数是log级别的,因为随着右端点向右延伸GCD是单调不增的,而每次递减GCD至少除以2。考虑固定左端点,最多就nlogn种GCD,可以直接把所有区间GCD值预处理出来,用map存储各种GCD值的个数,查询时直接输出。具体是这样处理的:枚举左端点,进行若干...转载 2017-07-31 20:32:17 · 295 阅读 · 0 评论 -
CodeForces - 592D(找树的直径)
题意:给出一颗节点数为n的树,其中有m个点必须要访问到,起点可以任意,每一次只能从当前点走到相邻点,每个点可以重复走,每走一步需要花费一个单位的时间,求把m个点走完最少需要花费的时间,并使得起点的编号最小.1.根据观察可以发现,起点一定是m个点中的一个,很明显如果起点不是红色的点,你需要先走到一个红色的点上去. 2.如果想要走完所有的m个点,则一定会走完一颗子树,这颗子树包含这所有转载 2017-08-07 21:23:55 · 381 阅读 · 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 · 491 阅读 · 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 · 389 阅读 · 0 评论 -
Broken robot (概率dp)
点击打开链接这是一道概率dp题目意思就是给你一个你n,m大小的方格,再给你输入当前位置,每次机器人只能向下,向左,向右移动一格,或者原地不动,类似于象棋里面小兵的移动。问平均需要多少次移动,能使机器人到达最后一行例如样例10 1010 4机器人已在最后一行,所以需要移动步数为0#include <iostream>#include <...原创 2017-07-24 13:32:49 · 577 阅读 · 0 评论 -
D - Fix a Tree (并查集+拆环)
题意: 已知有向树的定义,除了根节点外每个节点都有且仅有一条边都指向它的父亲节点,而根节点有且仅有一条边指向自己。 现在输入一张图,每个节点都有一条边指向某个点,要求修改尽量少的边,将这张图变成一颗树。\分析; 最终形成的树中一定只有根节点指向自己,并且除了根节点的自环外没有其他的环。 对于图中形成的一个环,我们只需要拆开一个点就能将这个环修改成一...原创 2017-07-24 23:21:40 · 367 阅读 · 0 评论 -
E - Strategic Game (HDU - 1054 )(最小顶点覆盖)(匈牙利算法模板)(树形DP)
题意:鲍勃喜欢玩电脑游戏,特别是战略游戏,但有时他无法找到解决方案,速度不够快,那么他很伤心。现在,他有以下的问题。他必须捍卫一个中世纪的城市,形成了树的道路。他把战士的最低数量的节点上,使他们可以观察所有的边。你能帮助他吗?士兵,鲍勃把一个给定的树,你的程序应该发现的最小数目。输入文件包含多个数据集的文本格式。我们来先了解一下什么是最小顶点覆盖;图G的顶点覆盖是一个顶点集合V,使得...原创 2017-08-09 10:48:56 · 1356 阅读 · 0 评论 -
A - 最长回文(马拉车算法模板)(回文串)
点击打开链接http://blog.csdn.net/dyx404514/article/details/42061017Manacher算法提供了一种巧妙地办法,将长度为奇数的回文串和长度为偶数的回文串一起考虑,具体做法是,在原字符串的每个相邻两个字符中间插入一个分隔符,同时在首尾也要添加一个分隔符,这样不论原串是积还是偶,都变成奇数来考虑Len数组有一个性质,那就是Len[i]-1...转载 2017-08-03 16:25:09 · 534 阅读 · 0 评论 -
E - Anton and Tree(dfs缩点+dfs找最长直径)
题意:给出n个点,n-1条边构成一棵生成树,每个点都有黑白两种颜色,每次改变颜色都能使同颜色的相邻点改变颜色,求最小改变颜色的次数分析:因为每次改变颜色都能使同颜色的相邻点改变颜色,所以相邻且颜色相同的点可以缩成一点,重新建图,构成黑白相间的点的树,设树的直径(任意两点的最远距离)为d,因为每次改变颜色都会使它与相邻的点的颜色相同,所以取树的直径上的点操作,共有d+1个点,因为点是黑白相间的,...原创 2017-07-26 14:40:07 · 378 阅读 · 0 评论 -
C - R2D2 and Droid Army(rmq+二分)
题面:D. R2D2 and Droid Armytime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputAn army ofndroids is lined up in one row. Each d...转载 2017-08-03 20:55:22 · 350 阅读 · 0 评论 -
One-Way Reform(欧拉回路)
题意:n个点m条边的无向连通图 ,没有自环没有重边 ,我们要把所有点都定向,希望使得尽可能多的点拥有相同的入度与出度让你输出满足这个条件的最大点数和每条边最后的定向欧拉回路有如下定理:1.D为有向图,D的基图连通,并且所有顶点的出度与入度都相等;或者除两个顶点外,其余顶点的出度与入度都相等,而这两个顶点中一个顶点的出度与入度之差为1,另一个顶点的出度与入度之差...原创 2017-08-07 13:16:35 · 411 阅读 · 0 评论 -
Bookshelf 2(01背包)(深搜)
点击打开链接有n头牛,已知每头牛的高度和书架高度,一头牛可以站在另一头牛身上,总高度是他们的高度之和。要求能够达到书架的顶端,即这些牛的总高度不低于书架高度,求满足条件的总高度的最小值,输出他们的差值。把牛能到达的总高度看做背包容量,dp[i] 表示在不超过i高度下牛所能达到的最大高度然后最后遍历一遍得到答案#include<stdio.h>#include&...原创 2017-07-17 16:06:11 · 539 阅读 · 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 · 361 阅读 · 0 评论 -
D - Well-known Numbers
点击打开链接题意就是一个类似斐波那契数列的式子, f[0]=1,f[1]=1,f[i]=f[i-1]+f[i-2]+...+f[i-k],(i>k),否则的话就是f[i]=f[i-1]+f[i-2]+....f[1]+f[0].考虑到k最小为2时,f[50]=10^10>10^9,所以只要计算存储到前50项即可。这样之后再利用贪心的思想,优先求最大的,知道s==0注意题目要求至原创 2017-07-13 15:18:50 · 207 阅读 · 0 评论 -
F - Rikka with Parenthesis II
点击打开链接利用栈来模拟匹配操作,当读入一个‘)’时如果栈顶是‘(’,则把‘(’弹出。当n为奇数本身无法匹配,注意题目要求必须要操作,所以排除n==2 s.size()==0 的情况当s.size() >4 时 一次操作不可能使所有括号符合要求 例如)))((( 这就没办法了注意该题输入左右括号数一致#include#include#include#define N原创 2017-07-13 15:59:18 · 250 阅读 · 0 评论 -
A - Cthulhu
点击打开链接题目意思就是有一个至少三个点的环,环shan原创 2017-07-14 09:45:10 · 264 阅读 · 0 评论 -
B - Little Pigs and Wolves
“there will be at most one wolf adjacent to each little pig”也就是说,对于每头狼,若它周围有猪,就++cnt点击打开链接#includeusing namespace std;char a[11][11];int main(){ int n,m; cin>>n>>m; for(int i=0;i原创 2017-07-14 10:41:47 · 365 阅读 · 0 评论 -
C - Colorful Graph
点击打开链接每个图里面有很多的点和边,每个点有各种颜色,求相邻颜色最多的颜色用一个set容器来记录每种颜色相邻的颜色#include #include #include #include #includeusing namespace std;int c[100005];set lw[100005];int n,m,ans=100000,x,y;int main()原创 2017-07-14 10:42:55 · 298 阅读 · 0 评论 -
D - Biridian Forest
点击打开链接今天做题时再一次卡在了memset上本来是一道bfs的水题但由于vis是二维数组,memset是用来赋值字节void *memset(void *s, int ch, size_t n);函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。memset:作用是在一段内存块中填充某个给原创 2017-07-15 19:40:19 · 270 阅读 · 0 评论 -
F - Misha and Forest
点击打开链接题意:n(2^16)个点组成的森林 给出每个点的度以及相邻点的异或和 求 输出所有边思路:一道bfs的题目,从入度为一的点入手,因为入度为一的点,他的异或和就是与他相邻的那个点。将所有的边存到一个结构体数组中#include #include#includeusing namespace std;int n;struct node{原创 2017-07-16 15:22:40 · 278 阅读 · 0 评论 -
G - Bad Luck Island
点击打开链接题意:会出石头、剪刀、布的人分别有r,s,p个,他们相互碰到的概率相同,输的人死掉,问最终活下去的人是三种类型的概率。一道dp的题目,我们假设dp[i][j][k] 为 i为石头的个数,j为剪刀,k为布各有多少时的概率,当由dp[i][j][k] 推向dp[i-1][j][k] 时i与j 碰到的概率是 i*j 总概率是sum= i*j + j*k + k*i所原创 2017-07-16 16:39:11 · 412 阅读 · 0 评论 -
E - Ping-Pong (Easy Version)
点击打开链接这个题告诉你不断的告诉你一些区间,然后如果两个区间(a,b)(c,d)满足 c然后对于每次查询看看两个点是否连通,第一感觉可以用dfs来做每次询问时看看能不能从a搜索到b#include #includeusing namespace std;int count=1;int vis[105]={0};struct node{ int l,r;}原创 2017-07-16 13:37:31 · 535 阅读 · 0 评论 -
H - Knight Moves
点击打开链接bfs ,没啥好说的#include#include#include#include#include#include#include#include#define N 1005using namespace std;int n,l;int vis[305][305];int dis[8][2]={2,1,1,2,-1,2,-2,1,2,-1,1,-2,原创 2017-07-16 20:16:07 · 376 阅读 · 0 评论 -
I - Paths and Trees(迪杰斯特拉)
点击打开链接大晚上的打代码确实挺心累的,本来想这题搞完就睡,没想到搞了好久题目将从某点出发的所有最短路方案中,选择边权和最小的最短路方案,称为最短生成树。题目要求一颗最短生成树,输出总边权和与选取边的编号。1.测试数据比较强 最大值要放很大 const ll inf=0x7fffffffffffff;(13个) typedef pair P;2原创 2017-07-16 23:12:45 · 283 阅读 · 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 · 306 阅读 · 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 · 315 阅读 · 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 · 560 阅读 · 0 评论