自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

aozil_yang的博客

点滴记录,记录成长,帮助你我!

  • 博客(607)
  • 收藏
  • 关注

原创 Codeforces Round #404 (Div. 2) -- C. Anton and Fairy Tale(二分)

题意:谷仓里最多有n 个谷子, 每天早上都会运来m 个 ,多了的就不要了,第i 天呢会有i 只鸟来吃谷子, 每一个鸟都会吃,都只吃一个,问你哪一天谷仓为空?思路:分类讨论了:当n 当n > m时候 我们发现  前m 天 一直都是满的 ,不可能为空, 第m+1天早上 满的,晚上 会少m-1个, 第m+2天早上又运来m 个,下午没了m-2个,那么假设第x 天没了的话,那么

2017-03-16 05:20:21 357

原创 Codeforces Round #404 (Div. 2) -- E. Anton and Permutation(分块xjb 搞)

题意:给你n 个数,一开始是1,2,3,,n。 给你q 个操作,每个操作可以交换两个数,每次操作输出逆序对数?思路:区间xjb操作 用分块瞎暴力就好了。把n 个数分成根号n 个区间,每个区间有根号n 个数。假如 交换a 位置和b位置(假设a 这个操作 可以二分每一块。因为刚开始肯定排好序的,用插入排序会很快了。 800多ms就过了。#include #defi

2017-03-16 04:59:10 1094 1

原创 POJ 1769 Minimizing maximizer (dp + 线段树)

题意:找最少的区间使得依次连续覆盖所有n 个数。思路:令dp[i]表示覆盖到 以i 为终点的区间的最少个数。那么dp[i] 转移肯定来自  s[j]~t[j] 里面的,我们需要 找一个k 使得 s[j] dp[i] = min(dp[i], dp[k]+1);找最小值可以用线段树优化。边界是dp[1] = 0#include #include #include

2017-03-15 21:05:31 602

原创 POJ 2674 Linear world (经典题目 -- 这个有坑= =)

题意:在一条线上,告诉你每个蚂蚁的位置和方向,两只蚂蚁碰面后原路返回,告诉你线的长度,和蚂蚁速度(所有的蚂蚁速度都一样),求最后一只蚂蚁掉落的时间和名字。思路:很久之前做的一道思路题目了。 这个题比较坑把 记录一下。两只蚂蚁碰面后相当于不回头一直往前走。那么我们可以记录下来每只蚂蚁假如不碰面掉落的时间,取个最大值就是最后一只蚂蚁掉落的时间,在把那个时间对应的每只蚂蚁位置记录下来

2017-03-15 15:26:42 467

原创 POJ 2559 Largest Rectangle in a Histogram(RMQ+二分)

题意:给你n 个宽度为1  高度不同的矩形,要求求最大的矩形面积, 高度低的可以向挨着的高度高的扩展。思路:很多都是单调栈,dp之类的。给大家 提供另一个思路:枚举矩形中心,二分右边最远能到哪,二分左边最远能到哪,更新最大值即可。一个区间合不合适,只要这个区间的最小值是否等于中心的高度即可。可以用RMQ处理。#include #include #include #

2017-03-15 00:23:31 475

原创 POJ 1284 Primitive Roots (欧拉函数--求原根数量)

题意:给你一个奇素数P, 求有多少个x 满足 x^i %P 为0~P-1. 其中1 思路:这正是对原根的描述假设一个数g 对于P来说是原根,那么g^i mod P 结果两两不同,且有1 这个题是求原根数量为phi [ phi[n] ]个欧拉函数直接打表就好了#include #include #include using namespace std;int

2017-03-14 22:02:36 471

原创 POJ 2155 Matrix (二维树状数组)

题意:给你一个N*N的矩阵,一开始每个元素都是0,给你q 个操作,每个操作,可以把(x1,y1)到(x2,y2)的矩形里元素取反(0变1,1变0)。 可以查询每个元素的值。思路:二维树状数组的应用。但是二维树状数组是用来求每个子矩阵元素之和的。这里思路比较灵活一些。我们先来考虑一个一维的问题:我们把[L,R] 这个区间 进行取反的话我们可以在L这个位

2017-03-14 20:44:56 282

原创 POJ 3281 Dining (最大流)

题意:告诉你每个牛喜欢的食物和饮料,每个食物和每个饮料只能给一只牛,求最大有多少牛 能得到喜欢的食物和饮料?思路:给每个食物向牛连边, 给每个饮料向喜欢的牛连边, 牛拆点 容量为1 保证前面只有一种食物,后面只有一种饮料。食物连源, 饮料连汇,求最大流即可。#include #include #include #include #include #define Siz

2017-03-14 13:56:36 273

原创 UVA 1629 Cake slicing (区间dp --记忆话搜索)

题意:给你n*m的网格上有一些樱桃,每次可以用一刀切成两块,求最小切割长度,使得每一块蛋糕上只有一个樱桃?思路:记忆话搜索。令dp[u][d][l][r]表示 在上界为u 下界为d,左边为l右边为r的矩形切割成只有1个樱桃的最小长度。那么直接枚举切哪一刀记忆话搜索即可#include #include #include using namespace std;co

2017-03-14 02:30:56 376

原创 UVA 11082 Matrix Decompressing (最大流)

题意:告诉你一个n*m的矩阵的每一行元素之和 和每一列元素之和,要求还原矩阵,矩阵的每一个元素不超过20。思路:没想到这种题竟然是网络流,长见识了:我们拆成每一行x1,x2,x3,,,xn  和每一列 y1,y2,y3,,,ym每一行和每一列连边,容量为19, 之所以是19,因为题目要求是1~20, 但流量可以是0,这样的话, 我们算出来是0~20的,不如我们减一,算0~19,

2017-03-14 00:52:15 388

原创 UVA 1664 Conquer a New Region (并查集+贪心)

题意:n 个城市形成一棵树,每条边有权值C(i,j),任意两个点的容量S(i,j)定义为i与j 唯一通路上容量的最小值,找一个点,使得它到其他点的容量之和最大,求最大值?思路:贪心思路。我们给边从大到小排序,因为是一棵树, 每个边都要处理。因此当前枚举的边一定是当前集合中 最小的边,因此他就是容量, 我们分别让两个端点的并查集父亲 作为中心城市, 找一个大的进行合并即可。这

2017-03-13 22:04:01 463

原创 UVA 1669 && HDU 4118 Holiday's Accommodatio (思路题目--统计子树结点 )

题意:给你一棵包括n 个结点的树,每个结点上住着一个人,每个人都要换房子,但不能有两个人 住在同一个房子,求的所有人的最大路程长度?思路:成都2011年区域赛的题目:感觉正解好巧妙:最优解肯定是让每一个边尽量走更多次数。那么我们只需要算一下每个边 走的最大次数是多少即可。比如说a 这个结点的子树里(包括a) 一共有u 个结点, 那么剩下的有 n-u 个结点。令f 是a的

2017-03-13 20:40:52 767

原创 UVA 1349 Optimal Bus Route Design (最小费用流 -- 二分图最小权完美匹配)

题意:给你n 个点的有向带权图,找若干个有向圈,每个点恰好属于一个圈,要求权和尽量小。求最小权和思路:每个点恰好属于一个有向圈,意味着每个点都有一个唯一的后继,反过来,只要每个点都有唯一的后继,每个点一定恰好属于一个圈,我们想到了二分图匹配,每个点都要匹配,且权和最小,显然是二分图最小权的完美匹配。直接拆点1,2,3,4,,n 连接着s,  1‘ 2’ 3‘,,,n’ 连接着t

2017-03-13 19:38:14 547

原创 UVA 1632 Alibaba(区间dp)

题意:告诉你n 个点位置和消失的时间,你可以从任意一个点出发,求出到达所有点的最小时间?思路:区间dp令dp[i][j][0]  你在i~j 这个区间的i 位置。dp[i][j][1] 表示你在i~j 这个区间的j 位置。转移的话 一个长度为k 的区间只能有长度为k-1的区间转移得到:吐槽:第一遍超时  写的记忆话搜索,  改成递推式后 可以免掉初始化这一步。这样就

2017-03-13 17:19:13 321

原创 UVA 820 Internet Bandwidth(最大流)

题意:求s到t的最大流思路最大流#include #include #include #include #include using namespace std;const int maxn = 10000 + 7;const int inf = 0x3f3f3f3f;struct Edge{ int from, to, cap, flow;};st

2017-03-13 00:41:06 531

原创 UVA 1658 Admiral (最小费用流)

题意:给你n 个点和m 个边,告诉你每个边的权值,要求从1~n 找出两条不想交的线路,使得他们的权值之和最小? 输出最小权值之和?思路:因为是两条不想交线路,那么除了1和n 其余的点 只能走一次, 1和 n 只能走2次,因此 我们这里拆点,  1和 n 拆成  容量为2 费用为0的边。其余的点拆成 容量为1  费用为0 的边。并且每个边也只能走一次,因此边也是容量为1  费用为

2017-03-12 13:06:53 412

原创 UVA 1001 Say Cheese (三维Floyd)

题意:在三维空间中,告诉你起点位置 和终点位置,  并且告诉你n 个球,你在球中可以瞬间移动,在球外的移动速度是10m/s ,要求从起点到终点的最小时间?思路:最短路问题,很明显floyd我们把起点终点看成半径为0的球, 那么问题就转换成了求 n+2个球的最短路。因为是瞬间移动.当两个球的球心距 小于等于 半径之和 的话,说明它们是相交的。 因此 这两个球的距离是0否则

2017-03-11 22:08:01 479

原创 UVA 821 Page Hopping (Floyd)

题意:告诉你哪两个点连通,求平均距离,为每个结点到其他点距离总和除以总对数。思路:Floyd水题这个题点不是连续的,直接存到vector里 枚举vector好了。#include #include #include #include #define Siz(x) (int)x.size()using namespace std;int g[107][107];b

2017-03-11 21:28:23 250

原创 UVA 12661 Funny Car Racing (Dijkstra最短路)

题意:在一个赛车比赛中,有n 个交叉点和m 个单向道路,每条道路周期性的开启a秒,关闭b秒,通过时间是t秒, 求从S到T 的最短时间?思路:和正常的迪杰斯特拉一样,存的是时间,优先时间小的先弹出。只不过在压入队列中 分情况讨论:1.如果现在的时间能进入这条道路,并且能在道路关闭之前出来,就进入队列。2.否则就等这条道路在开启时 在进入队列。吐槽:会有重边的存在,写成

2017-03-11 13:08:52 314

原创 UVA 1616 Caravan Robbers(二分 + 小数变分数)

大体题意:给你n 个线段,要求重新规划每个线段,使得每个线段的长度都一样,并且线段之间没有交点,问线段的最大长度是多少?思路:很容易想到二分线段的最大长度,然后看这个长度是否合适,合适就往右划分,不合适就往左划分。我直接说正解了:因为是输出分数,我们应该二分的时候用小数,然后小数变分数,找一个最接近的分数即可,枚举分母计算分子就可以。吐槽:一开始用的分数类二分,这样肯定

2017-03-11 00:02:11 718

原创 UVA 1640 The Counting Problem(统计题,找规律 + dfs)

大体题意:告诉你两个数a和b 问你a到b 区间内的数中,0,1,2,3,4,5,6,7,8,9每个数字出现了几次?思路:我们先写一个暴力的程序会找到一个规律:除了0以外的9个数字:9以内有1个 = num[1]99以内有20个 = num[2]999以内的有300个 = num[3]9999以内的有4000个 = num[4]。。依次类推:我们可以根

2017-03-10 20:16:30 492

原创 SPOJ VECTAR1 - Matrices with XOR property(统计)

大体题意:问你有多少个矩阵满足(i1,j1) and (i2,j2), if (i1^j1) > (i2^j2) then A[i1][j1] > A[i2][j2]对1e9+7取模思路:当i1^j1 == i2^j2 的时候不能比较大小, 全排列就好了。因此问题转换为有多少个i1^j1 == i2^j2 的位置,全排列乘起来就好了#include #include #

2017-03-09 21:23:45 339

原创 POJ 1742 Coins (背包)

大体题意:告诉你有n 种硬币,告诉你每种硬币的价值和数量,问你价值1~m 能凑出多少种来?思路:类似背包:令dp[i] = 1 表示价值为i 可以凑出来, 等于0 表示凑不出来。那么直接对每一种硬币看dp[j - a[i]]是否为1 即可,为1的话,就可以转移到dp[j]还有另外一个条件 就是数量问题:我们直接在开一个cnt 数组, cnt[j]表示凑出价值为j ,需要

2017-03-08 20:09:02 221

原创 UVA 1627 Team them up!(二分图染色+并查集+背包)

大体题意:告诉你n 个人的关系,要求所有的人分到两个组里,要求一个组里的人相互都认识。 每个人都必须要分到一个组里。 最后要求两个组的人员差值最小。最后输出两个组的人员。顺序随便输出即可。思路:当i 和j 不满足互相认识的话,就连接一条边,把能连通的点压到一个连通块里。这样会得到k 个连通分量。这样 就可以给每一个连通分量 进行二分图染色,当染色矛盾时,一定No solutio

2017-03-07 22:37:11 693

原创 玲珑杯 1101 - 萌萌哒的第六题 (树状数组+贪心)

题意:告诉你一个n 多边形,告诉你了n 个点的颜色(颜色只有三种RGB),并且告诉你n-3 条边,问你输入的数据是否满足以下条件:相邻的点的颜色各不相同,恰好把多边形分成多个三角形,并且三角形的三个点的颜色不相同。思路:颜色的话好说:先判断相邻的点颜色是否相同。然后在判断三角形的颜色,如果n-3条边互不相交的话,那么一定能恰好分成若干个三角形。假设互不相交的话,那么直接

2017-03-04 22:19:00 387

原创 玲珑杯 1100 萌萌哒的第五题 (KMP+DP)

题意:给你n 和m ,告诉你一个长度为m 的串,要求你构造一个长度为n 的串,使得长度为n 的串不包含长度为m 的串,求长度为n 的串的数量。思路:两种思路:先倒着想:所有串的数量是26^n.减去包含长度为m 的串的数量即可。令dp[i][j] 表示构造长度为n 的串第i 位,已经得到了长度为m 的串的第j 位的数量。那么枚举第i位的字符是什么,然后

2017-03-04 21:11:54 484

原创 UVA 1151 Buy or Build (最小生成树)

题意:告诉你n 个点的坐标,你要在两个点之间连线,使得点全部相同,连边的费用为这两个点的欧几里得距离,你的目的是使这个费用最低,并且你有q(q 思路:全部的点相通,很明显是最小生成树。最容易想到的是,暴力枚举哪一个套餐用,哪一个套餐不用,在求最小生成树,这样会超时,因为原图是一个完全图,有100W个边。有个小优化:我们可以先求一边最小生成树,n-1个边,在n-1个边中在暴力

2017-03-03 22:05:16 431

原创 UVA 10214 Trees in a Wood. (欧拉函数)

题意:在满足|x| 思路:显然 就是找有几对(x,y) 满足 gcd(x,y) = 1;因为不等于1的话,肯定在等于1位置的后面,肯定是看不到的。当 1当x+1 依次类推,,那么我们枚举列显然会更快了。#include #include #include #include using namespace std;typedef long long L

2017-03-03 21:36:12 389

原创 UVA 1674 Lightning Energy Report (树链剖分)

题意:给你一颗树(节点数最多5w), 给你q个操作,  每个操作,让你u,v两个结点之间的路径上的所有的点的权值都加上w。最后输出n 个点的权值?思路:裸树链剖分= =~和HDU 3966 一样的, 用树状数组就可以了详细见那一篇博客:Blog_HDU 3966#include #include #include #include #define ps push_b

2017-03-03 21:28:04 547

原创 UVA 1642 Magical GCD (思路+哈希map)

大体题意:给你n 个整数(n 思路:按照刘汝佳分析做的,加入一个数后,给它的所有后缀的gcd 打一个表,gcd 相同的 保留长度大的,其余的全部删除。那么这个表中元素数量最大是log2 j 个,很小的一个数。因此随便做了,但是不能用有序的stl  如set 还是会超时。用两个Hash map 来会导就可以了。#include #include #include #

2017-03-02 12:38:56 375

原创 UVA 1471 Defense Lines (STL + 二分)

大体题意:给你一个长度为n(n 思路:因为要删除一个连续的子序列,所以会分成左右两部分之和的形式,我们枚举右边一部分的起点位置i,快速的找到左边一个合适的位置j,使得a[j] (注: g[i]表示以i 位置结束的最长上升连续子序列的长度,f[i]表示以i位置开始的最长上升连续子序列的长度)这样我们可以利用set 来维护当前合法的左边位置的值。什么是合法的?  必须是a[i]

2017-03-01 22:21:22 338

原创 UVA 10820 Send a Table (欧拉函数打表)

题意不说了。思路:写几个样例就发现规律了:比如n =3 的时候:(1,1)(1,2)(1,3)(2,3)(2,1)(3,1)(3,2)会发现x和y 相等的只有(1,1)x y 的相等。数量是  phi[2] + phi[3] + ... + phi[n]那么答案就是 ( phi[2] + phi[3] + ... + phi[n])* 2 + 1;#in

2017-03-01 17:16:28 296

原创 POJ 3659 Cell Phone Network (树dp)

大体题意:给你一个棵树,要求选择尽量少的点,覆盖所有的点,选择一个点后,它相邻的点全都覆盖。思路:很明显树形dp。令dp[i][0],表示  选择i 这个点, 覆盖了以i 为根的子树所有的点。dp[i][1]表示 i 这个点不选,但选了 它的孩子一个结点,覆盖了以i 为根的子树所有的点。dp[i][2]表示i 这个点不选,但选了它的父亲,覆盖了 以i 为根的子树的所有结点。

2017-02-28 23:02:31 300

原创 UVA 1262 Password (水题)

大体题意:给你两个6行5列的数字矩阵,要求从每一列中选出一个字符来,使得两个矩阵中对应的列都存在,输出第k 小的密码。思路:数据量太小了。直接预处理出来每一列的合法字符,然后根据乘法原理,一步一步接近k 即可。有个坑:就是每一列可能有重复字符,要去重,这根据输出就可以晓得它的实际性。#include #include #include #include #def

2017-02-28 22:56:35 587

原创 Technocup 2017 - Elimination Round 3 -- D. Santa Claus and a Palindrome (贪心+Map瞎搞)

大体题意:给你n 个字符串的权值,要求每个字符串最多使用一次,使得组成一个长的回文串,使得权值最大,如果最大权值为负数,则输出0.思路:真的被这道题恶心到了。做这个题就是细心,讨论好就可以了。我们可以开一个map >mp; 来存取每个字符串的权值,因为相同字符串可以有多个权值,所以用vector存。枚举当前字符串s 时,如果发现不是回文串,直接找 s 对应的回文串,两边同时

2017-02-26 23:56:21 370

原创 UVA 714 Copying Books(二分+贪心)

大体题意:给你n 个数,要求分成m份,使得m份中的最大值最小,要求打印解,如果多解,要求第一份最小,其次第二份最小,,依次类推。思路:最大值最小,肯定是二分了。我们直接二分最大值,找一个最小的答案x。然后我们划分n 个数,因为越往前越小,所以肯定从后向前枚举。然后第i 个数要不要划分的话,有两个依据,当前和超过了x  或者 剩下的可以切的刀数不足 要求的刀数,那么就必须划分

2017-02-26 00:24:34 389

原创 UVA 11882 Biggest Number (dfs搜索+bfs 剪枝)

大体题意:给你一个r*c的数字矩阵,要求从任意一个点开始走,只能上下左右走, 求走的过数连接起来最大是多少?思路:直接dfs每一个数字,在每一层dfs中,加上bfs 判断剩下的数连接起来能否大于当前的ans 不能的话 剪枝了。虽然思路是这样的,但昨天一直TLE, 或许姿势不对,第二天重写了一遍 就好很多了= =#include #include #include #inc

2017-02-25 10:36:48 562

原创 UVA 12219 Common Subexpression Elimination (dfs瞎搞)

大体题意:给你一个字符串按照二叉树的形式,用消除公共表达式的方法可以减少表达式树上的的结点,输出最少的结点的图,详细见原题。思路:写的比较乱,感觉时间还行吧。借鉴一下吧。先写dfs 建树,在写个dfs2 从叶子结点向上更新父结点 重新标号,使得相同类的结点归为一类。在写个dfs3,重新从根节点标号,变得有序。最后print 函数  要么输出数字 要么输出字符串 讨论一下即可

2017-02-20 22:23:30 386

原创 UVA 307Sticks(dfs搜索)

大体题意:给你n个木棍,要求分配这个n 个木棍到x组,使得x组的木棍长度和都相同,问最小的长度和是多少?思路:直接搜索:需要加很多剪枝才能过:1.首先你枚举时,应该枚举组数,而不是长度和,否则循环会很长。2.如果第一个木棍选完了,没找到合适的使它权值和为枚举的答案,就不可能有答案了。3.如果第i个木棍能组成ans,但其余的不能了,也不能有答案了。4.当长度小于ans

2017-02-20 00:35:30 364

原创 Codeforces Round #398 (Div. 2) -- C. Garland (dfs)

大体题意:给你一颗树,要求切掉两个边,使得剩下的三个子树权值相同,问切哪两个边? 没有输出-1思路:因为第一次删除肯定是删除一个完整子树。所以直接统计出每个点包含的完整子树的权值之和, 发现一个点的权值之和等于sum/3 的话,就把它切掉,直到切掉两个为止。注意:切掉之后点的权值之和会发生改变。其次 根节点不能被切。#include #define mr make

2017-02-19 00:35:02 457

空空如也

空空如也

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

TA关注的人

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