自定义博客皮肤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的博客

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

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

原创 2017 CCCC预赛总结

CCCC预赛总结  很开心学校能够打进决赛。    在比赛前一天晚上才想到还有CCCC的比赛,顿时就方了,虽然有很多水题,但还是很方,根据以往打CCCC的经验,CCCCL2阶段必然有一个二叉树之类的数据结构,晚上就看了看二叉树和堆之类的数据结构,结果一个也没考到,失望了许久。总之,比赛前一天晚上看了一些数据结构题,算是有所准备了。  第二天,被教主喊醒,好困啊!抓紧洗刷后赶到集合地点,

2017-03-26 01:36:57 1375 2

原创 POJ 3169 Layout(差分约束_ Bellman-ford)

题意:给你n 只牛。告诉你一些牛的最远距离是多少, 告诉你一些牛的最近距离是多少, 并且 第i 只牛一定在第i-1只牛的右边,求1到n的最远距离, 不存在输出-1, 无限远输出-2;思路:差分约束。我们知道最短路的判断:如果d[e.to] >= d[e.from] + e.dist;那么d[e.to] = d[e.from] + e.dist所以 d[e.to]

2017-03-30 14:32:07 478

原创 Educational Codeforces Round 18 -- C. Divide by Three (贪心)

题意:给你一个大数,长度最大是10w, 要求你删除最小的数字使得这个数不含前导零 并且能整除3.思路:贪心:我们知道  如果一个数 的各个数字之和sum 能整除3 的话,那么这个数就是3 的倍数。我们先判断 sum % 3 是否等于0  等于0 直接输出。不等于0 的话, 假设是x 的话,那么另一个相对的是y (y = 3-x)那么我们可以找到一个数字 他的mod 3

2017-03-29 22:17:41 369

原创 UVA 12003 Array Transformer (分块)

题意:给你n 个数,和m 个操作,m 个操作先查询 [L,R]上比x 小的个数, 在根据这个数 对 某个数进行变换。思路:真的是xjb 操作啊,直接分块怼就行。直接建立一个有序的分块即可。然后就是删除vecror 和插入排序。#include #include #include #include #include using namespace std;typ

2017-03-29 20:33:11 593

原创 UVA 11990 ``Dynamic'' Inversion (分块 )

题意:给你n 个数的排列,和q 个操作,每个操作删除一个数,在删除每个数之前 输出当前的逆序对。思路:动态逆序对一般用分块乱怼一波就好了。建立两个分块,一个存有序的数,另一个是未排序的。删除x的话, 把x 不在的分块直接二分 找 大于x的数 和小于x的数。对于x 在的分块,直接o(sqrt n)查询一下就好。注意有序vector 和无序vector的删除,这里傻笔了,w

2017-03-29 19:27:35 416

原创 团体程序设计天梯赛-练习集 -- L3-014. 周游世界(dijkstra)

题意:给你一些边,每个边都属于一个确定的公司,告诉你q 个询问,每个询问让你输出两点之间的最短路,并且打印解,连续属于一个公司的线路,只打印收尾。思路:这个题赛场上过样例后,只得到了一分。= =其实就是个很水的dijkstra。只不过要求的最通畅路线是 要求节点数最小,节点数相同要求换公司线路最小。这个题wa了好久,原因是 优先队列优先级写反了。我们只需要简单的修改一下

2017-03-29 10:43:21 1503

原创 LA 3026 && POJ 1961 Period(KMP求前缀的最短循环节)

题意:给定一个长度为n 的字符串s,求它的每个前缀的最短循环节?思路:我们想一下KMP的next 函数。next[i]表示 由S[0],S[1],,,,S[i] 构成的字符串的最大前缀长度 使得前缀等于后缀。那么这个问题就很好办了。假设当前枚举到i 位置了。(目前字符串的长度是i)假设最短循环节是X。那么next[i] 一定是i - X;所以我们只需要判断i 是

2017-03-28 22:16:44 500

原创 团体程序设计天梯赛-练习集 -- L3-015. 球队“食物链”(状压+dfs 求哈密顿回路)

题意:告诉你n个球队,求一个字典序最小的食物链。头一次听说 足球食物链,相当精彩啊= =。思路:赛场上用普通的dfs 骗了一些分。但是没骗够。 因为有一个细节没挖到。就是A战胜B 不一定是A赢B 也可能是B输给A。可以把问题转换为求一个哈密顿回路:这是一个NP难问题。 可以用状态压缩 + dfs 的方法来做:相当于剪枝。令dp[i][st] 表示第i

2017-03-27 22:10:38 1284 2

原创 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest 组队选拔赛一

Problem C. CodeCoder vs TopForces题意:每个人有两个成绩a和b,告诉你n个人的成绩,A能战胜B的条件是A中a或b能够高于B中对应的a或b,或者A不能直接战胜B,但是A能战胜C,但是C能战胜B,那么A也能战胜B。问你每个人都够打败人的数量?思路:我们先按照成绩a排序,令mx[i]表示第0,1,2,,,i个人中b成绩的最大值,这样的话,最后一个人能够战胜

2017-03-27 00:20:26 1583

原创 团体程序设计天梯赛-练习集 -- L2-018. 多项式A除以B(多项式除法--模拟)

题意:给你两个多项式A和B,求A/B 的商和余数。思路:这个题目 学到了多项式除法 = =,好水。具体看一下百度百科:多项式除法的介绍多项式A/B,循环终止条件就是当A的最大指数小于B的最大指数时,这时A就是余数。否则就一直循环。怎么除呢:我们构造出一个式子来,使得B乘以这个式子能等于A的最大指数的那一项,然后把它消掉,一步一步模拟,直到A的最大指数小于B的

2017-03-26 00:09:09 2365

原创 团体程序设计天梯赛-练习集 -- L2-012. 关于堆的判断(最小堆)

题意:给你n 个数,插入到堆中,给你m 个四种命令,问你是否正确。思路:手写堆push 函数,先建立好堆,因为每个数都是独一无二的,直接统计每个数在堆中的位置,模拟询问即可。就是询问的读入有些麻烦,多写几个if else 特判就好了#include #include #include using namespace std;int n,q;int heap[100

2017-03-24 22:12:40 529

原创 SPOJ DQUERY - D-query(主席树-区间不同数的个数)

大体题意:给你n 个数,给你q个询问,每个询问问你某个区间上不同数的个数是多少?思路:主席树入门题:简单记录一下:这里先建立一个完整的线段树,这里的区间就代表区间了,不再是第几大了,定义的sum 是这个区间上的不同数的个数有几个。因为是主席树嘛,所以肯定要建立n 棵线段树,每个线段树是以每个位置的数为根,比如说该建立第i 个线段树了,如果这个数字之前没有出现过,那么我们

2017-03-23 20:58:56 3982

原创 CCF习题 201703-4 地铁修建(dijkstra 或者 最小生成树)

题意:很水很水的一道题目, 但自己也很水, 没得全分= = ~~~求使得1和n 连通得一条路中最大路权最小值。思路:多个思路:1. 修改dijkstra,把判断距离改成判断 最大路权即可。2. 最小生成树,直接按照最小生成树做,当1和n 连通时就找到答案了,因为这时候肯定是边最小的。迪杰斯特拉版本代码:#include #include #include

2017-03-23 18:15:17 4279 6

原创 对主席树的一点理解 -- 例题POJ 2104

断断续续看了许久的主席树,简单记录一下。什么样的题目用主席树呢,比如POJ 2104 求区间第K大的数是谁?当时做这个题时,感觉分块+二分可以搞,就写了好久,改了好久,始终TLE,还是学学主席树把= =。先吐槽一下线段树:线段树竟然是被一个黄嘉泰的大佬因不会划分树来代替的,,,,,因缩写是HJT取名为主席树= =!orz主席树大体思路:我们怎样求区间第K大数呢:假如我们

2017-03-22 21:50:26 898 2

原创 POJ 3181 Dollar Dayz (有点像背包的dp -- JAVA大数)

题意:给你k种硬币,价值分别为1,2,3,,k,要求问你凑出n 元钱的数量?思路:令dp[i][j] 表示利用前i 种硬币来凑出 j 元钱的数量。那么边界 dp[1][i] 都是1那么dp[i][j+o*i] += dp[i-1][j]j表示用前i-1 种硬币凑出来的价值,o 是利用第i 种硬币的数量。但是n 能到1000,种类能到100,那么这个数量会爆long lo

2017-03-20 12:43:12 483

原创 HDU 1829 A Bug's Life(种类并查集)

题意:给你n 个人,m 个操作, 每个操作告诉你两个人不是一个性别的,问你能否给所有人分成两组不冲突。思路:加权并查集取模变成种类并查集。好不爽,个人赛时竟然花费了一小时在一道简单的种类并查集上,于是就找了几个类似的水一水= =!我们记录每个结点父节点时,在开一个数组a,记录这个结点到根结点的距离。这样 如果一个操作中的两个人在一个连通块时,那么只需要判断它们的距离是否是一

2017-03-19 01:16:00 470

原创 Codeforces Round #254 (Div. 1) -- C. DZY Loves Colors(分块)

题意:给你n 个数,有q 个操作,操作1,使得L到R的区间的a全变成x,b 加上|x-a|。 操作2查询L到R上的b 总和。思路:分块乱搞就好了。我们用flag[i]表示i 这个分块是否是一样的。当前分块如果是完整的话,如果是一样的话,直接更新到答案里,不是的话就暴力一遍。如果不完整的话,在讨论是不是一样的。#include using namespace std

2017-03-17 00:30:21 441

原创 POJ 1704 Georgia and Bob (Nim博弈)

题意:排成直线的格子上有n 个棋子,棋子i 在左数第pi 个格子上,Georgia 和Bob 轮流选择一个棋子向左移动,每次可以移动一格及以上任意多格,但是不允许反超其他的棋子,也不允许将两个棋子放在同一个格子上。无法进行移动的一方失败,假设Georgia 先进行移动,当双方都采取最优策略时,谁会获胜?思路:Nim 博弈:有n 堆石子,每一堆数量告诉你,一方可以从某一堆拿至少一个石

2017-03-16 17:22:50 303

原创 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 465

原创 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 480

原创 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 341

空空如也

空空如也

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

TA关注的人

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