自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (1)
  • 收藏
  • 关注

原创 Component Tree

题意:给定一棵树,每一个节点都有一些属性以及他们的状态,然后给定q个询问,每个询问问节点A的某个属性的状态,如果没有就往上咨询,直到有为止,如果没有就输出“N/A”(题目强制在线操作)。 解法:可持久化线段树,先对属性离散化(我用的是map),线段树维护当前节点以及往上的每一个属性的状态就好了,直接裸地维护就好了。 #include <stdio.h> #include <stdlib.h>

2016-10-25 20:07:44 2736 1

原创 FacePalm Accounting

水题:给定n个数,要求任意k个数的和都为负数,对于每个数的操作不能减到小于初始的最小值,更改的代价为减小的值的和,问最小代价。 贪心 从左到右对于每段序列,考虑从右往左进行改变,因为这样对于后面的增益是最大的,然后减到最小值再往前找不为最小值的数再进行减操作。我用了链表优化 #include <stdio.h> #include <stdlib.h>const int maxn = 30000

2016-10-25 19:37:44 312

原创 Ants

题意:平面上有一些蚁巢,每只蚂蚁在任意蚁巢都会走距离自己最近的蚁巢,如果有多个那么就优先x最小,再到y最小。现在有多组询问,每组询问代表两只蚂蚁所在巢穴,问最终他们会不会相遇。 KD树+并查集 对于任意一个起点,到最后必定会在两个点之间徘徊,所以可以用并查集,KD树找出每个点最近的那个点就可以了。 #include <iostream> #include <algorithm> #incl

2016-10-13 14:32:19 401

原创 The Closest M Points

题意:给定二维平面的一些点,然后q个询问,每个询问给定一个点,求距离这个点前num近的点 解法:裸的KD树,直接套模板 #include <iostream> #include <algorithm> #include <stdio.h> #include <string.h> #include <queue> using namespace std; #define LL long l

2016-10-13 14:21:22 339

原创 Road

朴素线段树 分别用两颗线段树记录记录每一个道路第一次使用和最后一次使用的时间,然后通过类似前缀和的记录第i天的花费,时间复杂度为 NlogN #include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> using namespace std;const int maxn = 210000; int

2016-10-10 10:55:51 209

原创 Genius ACM

题意:定义SPD=∑Di2SPD = \sum {Di^2},Di 为在数列中随机不重复抽取1对,两个值的方差。现在给定一个数列,问最少要把它分割成连续的多少段,使得每一段抽取m队的SPD值不超过给定的 limit (如果不足m对就尽量多抽取)。 倍增+二分+暴力 首先注意对于一个数列,最大的SPD值就是排好序之后最大与最小、第二大与大二小…这样构成的m对的方差和。其次要想分段最少,那么对于

2016-10-10 10:24:04 1449

原创 Eighty seven

题意:给出n个数字,去掉其中不超过3个,问能否在剩下的数字中挑出10个使得和为87。 暴力+bitset优化 用 f[i][j][k] 表示去掉第 i , j , k 个能否满足,在剩下的数中用 bitset<88> s[i] 表示取 i 个数能构成什么数字,转移就好了。 #include <stdio.h> #include <iostream> #include <algori

2016-10-10 10:00:42 474

原创 Count primes

题意:求1~n中有多少个素数 解法:O(n) 的线性筛法就不说了,下面提供两个更强大的模板 #include <stdio.h> #include <algorithm> #define LL long long using namespace std; LL f[340000],g[340000]; int main(){ LL n; while(scanf("%lld",

2016-10-10 09:51:15 249

原创 Ugly Problem

要求把一个数分成不超过50个回文数的和。 其实每次都找一个尽量接近当前数值的回文数,可以证明数的数量大概会接近 log(数的长度)个。至于怎么找,我是先构造一个回文数,假设当前剩下的值为a,我把a的前一半翻折到后一半去,那么就得到一个回文数,但是这个回文数可能会比a要打,然后我从中间位置到到第一位进行查询,一但找到一个数大于0, 那么我就把这个数减一,并且把中间位置到这个数的所有数都赋值为9,

2016-10-08 14:34:00 694

原创 Instability

一个集合中如果包含三个点相互连通或相互都不连通,那么这个集合算是合法,问有多少个这样的集合。 我们反过来想,如果正着求有多少个这样的集合,那么重复状况很难排除,反过来算有多少种不合法的集合,发现其实种类只有很少,直接用全局减去这些不合法集合的方案数就是答案了。 ( 可以手动画一下,各种不合法的情况,而且由定理得到不合法情况点数不会达到6或以上) #include <stdio.h> #in

2016-10-08 14:24:47 188

原创 Triangle

水题:给出1~n长度的木棍,问最少取走多少根剩下的木条无法构成三角形。 剩下的木棍要最多的话就是斐波那契数列,而且n只有20,打表也可以。 #include <iostream> #include <stdio.h>const int f[21] = {0,0,0,0,1,1,2,3,3,4,5,6,7,7,8,9,10,11,12,13,14}; int main() { int tt

2016-10-08 14:17:36 196

原创 Coconuts

给出n*m的图,图中有不超过200个障碍点,要求把所有连通块的大小从小到大输出。数据保证第一行和最后一行不同时存在障碍,第一列和最后一列不同时存在障碍。 我的做法就是大暴力+map记忆化。对于每一个障碍,找他周围是否存在好的点,如果存在就对这个点做bfs,因为200个障碍点配合边界最大包围的区域为1+2+…+199,所以如果超过这么多个点那么一定不是一个被包围的区间,还有一个优化就是如果行或列

2016-10-08 14:11:36 425

原创 Basic Data Structure

题意:给一个栈,有push , pop , reverse , query 。 query求从栈顶到栈底逐个求 NAND 的值, 如果栈为空就输出 Invalid. 解法:可以用双向队列来模拟操作,每次都记录最接近栈底的0的位置(两边都要),那么对于QUERY操作,如果存在0位置,如果在0之前有数字,那么到0这个位置就会变成1, 不然就是0。然后从0的位置往后一定都是1,对于每一个1,答案都

2016-10-08 13:59:06 486

原创 Minimum’s Revenge

水题:对于1~n,两点距离为两点的lcm值,求最小生成树。 考虑每个点都与1相连,就是 2+3+..+n。 #include <cstdio> long long n; int main() { int t, ca = 0; scanf("%d", &t); while (t--) { scanf("%lld", &n); long lon

2016-10-08 13:50:24 423

原创 UmBasketella

BNU 3856 水题:给出圆锥的表面积(包括底面),求最大的体积 把公式写出了,面积转换成对于 r 的函数,求导发现是先增后减,然后求出最大体积对应的 r 值就好了 注意输出只能用 float 0.0 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <iostream> using namesp

2016-10-08 13:43:54 205

原创 Escape

BNU 3850 题意:给出n*m的网格,初始点在(0,0),初始方向向上,每次只能转右,问不经过重复的点到达对应(x,y)点有多少种方案。 排列组合。 解法:首先考虑只走1条或2条线段到达目标点只有一种可能,对于绕三条线段到达目标点,那么一定会有1个点出现在目标点上方;对于四条线段的就会有一个在目标点上方,一个出现在目标点右方…依次类推,每多一条线段,就会按照(上、右、下、左)依

2016-10-08 13:33:14 221

原创 Magic boy Bi Luo with his excited tree

题意:给出一棵树,给出每个节点的价值以及每条路径的花费,每个节点不论经过多少次只能取一次对应的价值,而每条路径每通过一次都要付出对应的代价。要求输出从每一个节点出发的最大获利。 树形dp。 思路挺显然的,但是关键是对细节的处理。先做一次dfs,预处理出每一个节点往下走不会来(v1)以及回来(v2)的最大收益。然后第二次dfs就是伴随记录每个节点往父亲走不会来(fa_v1)以及回来(fa_v2

2016-10-07 10:25:38 410

原创 The Battle of Guandu

题意:给定n个村庄,可以理解每个村庄有无限多人,曹操向每一个村庄要一个人到固定的战场需要花费cost[i]的代价,同时会有一个人加入袁绍(敌方)的某个固定的战场。现在每个战场有一个重要值(0,1,2),0代表无关紧要,1代表不能输,2代表一定要赢,问曹操赢的最小花费。 差分约束的思想 其实对于每一个村庄,话费代价使得一个人到自己 i 战场一个人到敌方 j 战场,相当于花费这个代价,从自己对应的 j

2016-10-07 10:06:50 354

原创 As Easy As Possible

题意:给定一个字符串,有多段查询,问 (l,r) 中最多出现了多少个 easy 倍增 先预处理,对于每一个e往后跳 2**0 步是最接近它的a,每个a往后跳 2**0步是最接近它的s,以此类推。y后面要接e,于是就用倍增,利用f[i][j]表示第i位往后跳2**j步所到达的位置。然后对于每次查询,先找到第一个大于等于l的 e,然后看最多能往后面跳多少步,结果除以4就是答案。 #include <

2016-10-06 09:58:24 442

原创 Lights

题意:给出n个点,定义两个点能相互到达当且仅当一个节点能够通过曼哈段距离到达另外一个节点,而且仅当遇到其他点才能拐弯。问图中是否所有节点都能相互到达。 线段树 题解:首先对所有点优先按 x 坐标进行排序,每次对于当前状态,我们都保证在搜到的 x 坐标左边的所有点满足两两之间相互连通,然后对于每一次新加进来的 x ,从下至上扫描每个点,并且找到对应 y 坐标最右边的点,那么该节点满足于左边节点满足连

2016-10-06 09:51:09 453

matlab教程

包含了matlab的许多基本操作以及使用方法,适合新手学习使用

2018-07-14

空空如也

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

TA关注的人

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