自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Facico的博客

程序员之所以犯错误,不是因为他们不懂,而是因为他们自以为什么都懂。

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

原创 【51Nod 1110 】距离之和最小 V3

DescriptionX轴上有N个点,每个点除了包括一个位置数据X[i],还包括一个权值W[i]。该点到其他点的带权距离 = 实际距离 * 权值。求X轴上一点使它到这N个点的带权距离之和最小,输出这个最小的带权距离之和。Solution看到这个n个点到一个点的“距离和最小”,就要想到中位数。 但是它带权,那么怎么办? 其实一个坐标为x,带了个权w,就相当于有w个x,因为如果最优位置在y处,前者的

2016-10-30 16:55:09 744

原创 【51Nod 1109】01组成的N的倍数

Description给定一个自然数N,找出一个M,使得M > 0且M是N的倍数,并且M的10进制表示只包含0或1。求最小的M。 例如:N = 4,M = 100。Solution开始用深搜做了一下,结果不行,很显然不行,打开话题看了一下,改成用广搜做了一下。可以了!!Code#include<iostream> #include<cstdio> #include<cstring> #includ

2016-10-30 07:46:36 1630

原创 【NOIP2016提高A组模拟】配对游戏

Description流行的跳棋游戏是在一个有m*n个方格的长方形棋盘上玩的。棋盘起初全部被动物或障碍物占满了。在一个方格中,‘X’表示一个障碍物,一个‘0’~‘9’的个位数字表示一个不同种类的动物,相同的个位数字表示相同种类的动物。一对动物只有当它们属于同一种类时才可以被消去。消去之后,他们所占的方格就成为空方格,直到游戏结束。要消去一对动物的前提条件是:这对候选动物所在的方格必须相邻,或它们之间

2016-10-29 16:05:23 808

原创 【NOIP2016提高A组模拟】小W学物理

Description为了测试小W的物理水平,Mr.X在二维坐标系中放了N面镜子(镜子坐标绝对值不超过M),镜子均与坐标轴成45°角,所以一共有两种类型“/”和“\”。原点不会有镜子,任意一点最多只有一面镜子。 镜子两个面都能反光,而中间不透光,例如,对于一个“/”型镜子,下方向射入的光线会被反射到右方向,左方向射入的光线会被反射到上方向。 现在有一条光线从原点沿X轴正方向射出,求走过T路程后所

2016-10-29 15:58:03 797

原创 【NOIP2016提高A组模拟】完美标号

Description给定M个二元组(A_i, B_i),求X_1, …, X_N满足:对于任意(A_i, B_i),有|X_{A_i} - X_{B_i}| = 1成立。Solution上面题设的转换形式就是二元组的ai和bi颜色不相同。 那么直接0、1染色之类的。 直接一个dfs就搞定了。Code#include<iostream> #include<cstdio> #include<cst

2016-10-29 15:55:05 516

原创 【51Nod 1086】背包问题 V2

Description有N种物品,每种物品的数量为C1,C2……Cn。从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数)。求背包能够容纳的最大价值。Solution这是一个经典的有限背包问题,但是它需要优化复杂度。 他用到了一个很奇妙也很机智的思想:每个数可以用二进制来表示。二进制优化因为每个数的个数如果逐个枚举

2016-10-24 20:29:20 901

原创 四边形不等式优化DP学习小记

简介有一种DP可以写成四边形不等式,那么可以用一个优化来优化这种DP(一般是二维的,不加优化是O(n3)O(n^3))。四边形不等式如果a≤b≤c≤da≤b≤c≤d,那么如果DP式子满足f(a,c)+f(b,d)≤f(b,c)+f(a,d)f(a,c)+f(b,d)≤f(b,c)+f(a,d),那么这就是一个四边形不等式。先看个例题题意N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选

2016-10-23 08:40:24 1159

原创 【51Nod 1103】N的倍数

Description一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍数。 例如:N = 8,数组A包括:2 5 6 3 18 7 11 19,可以选2 6,因为2 + 6 = 8,是8的倍数。Solution好机智的一道题目。想了好久才想出来。 首先想到的是每个数都要去mod N。然后这些数只会出现在[0,N-1]之间。 之后就不知道要怎么做了。 然后观察了一下,那么数的范

2016-10-20 20:09:57 1373

原创 【51Nod 1052】 最大M子段和

DescriptionN个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的。如果M >= N个数中正数的个数,那么输出所有正数的和。 例如:-2 11 -4 13 -5 6 -2,分为2段,11 -4 13一段,6一段,和为26。Solution刷刷水有益身心健康。 不过我还是没有一眼看出来。 考虑DP的以为必须选和可选可

2016-10-20 19:58:31 1050

原创 【51Nod 1180】方格射击游戏

DescriptionM*N的方格矩阵,一个人在左下角格子的中心,除他所站位置外,其他格子的中心都有一个敌人,他一次可发射一枚子弹干掉一条直线上的所有敌人,问至少要发射多少子弹才能干掉所有敌人。Solution在一条直线上如果经过了两个点及以上,那么第一个经过的点一定是互质的,因为经过的第一个点的斜率就可以确定,如果不是互质,那么肯定是在前面确定的。 所以答案等于2+∑n−1i=1∑m−1j=1(

2016-10-20 19:55:55 1108

原创 【51Nod 1241】特殊的排序

Solution一个数组的元素为1至N的整数,现在要对这个数组进行排序,在排序时只能将元素放在数组的头部或尾部,问至少需要移动多少个数字,才能完成整个排序过程? 例如: 2 5 3 4 1 将1移到头部 => 1 2 5 3 4 将5移到尾部 => 1 2 3 4 5 这样就排好了,移动了2个元素。给出一个1-N的排列,输出完成排序所需的最少移动次数。Description看到这题就一脸懵

2016-10-20 19:00:47 545

原创 【NOIP模拟】打膈膜

DescriptionSolution一看就是一道贪心题。 而且贪心的策略实在,太明显了。 首先,群伤肯定在单伤的前面放完,然后在一个个用重击和轻击。 那么枚举一下用多少次群伤,然后模拟就好了。Code#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define

2016-10-16 00:53:12 649

原创 【NOIP模拟】最大化

DescriptionSolution一个好像很经典的题目,但是之前没打过。 不过仔细想一想还是很容易的。 首先很容易想到把这个表现为矩阵前缀和的形式,然后就是要求这个大于0。 然后就是一个很经典的转换套路了:本来是a[k][l]−a[i−1][l]−a[k][j−1]+a[i−1][j−1]≥0a[k][l]-a[i-1][l]-a[k][j-1]+a[i-1][j-1]≥0,然后移一下项就

2016-10-15 21:39:03 406

原创 【NOIP模拟】算循环

DescriptionSolution这题很简单。 分别考虑每个点的贡献。 ans=∑∑x∗y∗(n−x+1)∗(n−y+1)ans=\sum \sum x*y*(n-x+1)*(n-y+1) 那么拆一下,就是x和y的答案分别乘起来。 比如说x的答案:∑x∗(n+1)−x∗x\sum x*(n+1)-x*x 那么用一下平方和公式和等差数列求和就好了。Code#include<iostrea

2016-10-15 14:41:38 558

原创 【NOIP2016提高A组五校联考4】square

DescriptionSolution比赛的时候就想到了要二分,还有像RMQ一样的弄,就像有一道题叫做妮厨的愤怒(我的博客上有)一样,思想十分的简单,但是我没有打完TAT。 比赛之后推倒重写。一个f数组首先需要一个f数组f[i][j]表示以(i,j)为右下角的最大正方形的边长。 f[i][j]=min(f[i−1][j],min(f[i−1][j−1],f[i][j−1]))+1f[i][j]=

2016-10-10 14:52:42 669

原创 【NOIP2016提高A组五校联考4】label

DescriptionSolution这题比赛的时候没有做出来是要值得反思的。 本来40的算法就非常好打,而且另外的20分打完之后也可以发现一个性质是f[i][j]在j在[1,m](m≥(n−1)∗k)[1,m](m≥(n-1)*k)中是对称的,然后中间一串是相等的,那么DP在j的处理当中只用处理一下前(n-1)*k个的情况和中间的一个情况就好了。 只不过是判断边界条件需要仔细的想一想,这里有点

2016-10-10 14:33:00 798

原创 【NOIP2016提高A组五校联考4】ksum

DescriptionSolution这题不是明显的堆来模拟吗,然后在hash判个重就好了。 但是,这题要值得反思的是,我以前的人工堆有一个很致命的错误,就是堆顶退堆的时候,应该把堆底和堆顶交换,然后num–之后再down一下,这然才对,错误的就不说了。 还有一个问题就是:我不会用STL来实现多元的堆,这个还要学习一下。Code#include<iostream> #include<cstdio

2016-10-10 14:27:44 535

原创 【JZOJ4807】破解

DescriptionSolution一看到这道题就想到了差分,那么就是把右端点+1。 然后就把一些无用的区间给除掉,比如说有一些区间首尾相接然后拼成的大区间已经出现过了,那么这个大区间就没有用了。 把这个转成图论的形式。 把l向r连边,然后有一个大小为size的联通块有用的边只有size-1,那么方案数就乘上2size−12^{size-1}。 这个用并查集来搞联通块就好了。 然后还要注

2016-10-06 19:55:13 660

原创 【JZOJ4806】打工

DescriptionSolution比赛的时候以为是n log n的,所以就没有去想n2n^2,然后就花了好几个小时来推递推式,结果没有推出来。结果只让我拿了十分,去死吧,魔王大人。 其实,正解就是n方的。 设f[i][j]表示做到第i个,然后前面最大的是j。 f[i][j]=f[i−1][j]∗j+f[i−1][j−1]f[i][j]=f[i-1][j]*j+f[i-1][j-1] 因为

2016-10-06 19:46:38 439

原创 【NOIP2016提高A组五校联考2】tree

Description 给一棵n 个结点的有根树,结点由1 到n 标号,根结点的标号为1。每个结点上有一个物品,第i 个结点上的物品价值为vi。 你需要从所有结点中选出若干个结点,使得对于任意一个被选中的结点,其到根的路径上所有的点都被选中,并且选中结点的个数不能超过给定的上限lim。在此前提下,你需要最大化选中结点上物品的价值之和。 求这个最大的价值之和。 Solution这题啊!其

2016-10-05 16:01:16 390

原创 【NOIP2016提高A组五校联考2】running

Description小胡同学是个热爱运动的好孩子。 每天晚上,小胡都会去操场上跑步,学校的操场可以看成一个由n 个格子排成的一个环形,格子按照顺时针顺序从0 到n-1 标号。 小胡观察到有m 个同学在跑步,最开始每个同学都在起点(即0 号格子),每个同学都有个步长ai,每跑一步,每个同学都会往顺时针方向前进ai 个格子。由于跑道是环形的,如果 一个同学站在n -1 这个格子上,如果他前进一

2016-10-05 15:47:34 827

原创 【NOIP2016提高A组五校联考2】string

Description给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位。 由于答案可能很大,模10^9 + 7 输出。Solution这题不是道水题吗!每个位置一次的去做,然后后面直接算就可以了,对组合数的基础掌握吗!Code#include<iostream> #in

2016-10-05 14:52:47 664

原创 【51Nod 1363】最小公倍数之和

Description 给出一个n,求1-n这n个数,同n的最小公倍数的和。 例如:n = 6,1,2,3,4,5,6 同6的最小公倍数分别为6,6,6,12,30,6,加在一起 = 66。 由于结果很大,输出Mod 1000000007的结果。 Solution 做这道题,这是历经波澜! ans=∑ni=1gcd(i,n)ans=\sum_{i=1}^n gcd(i,n) 设f

2016-10-04 22:21:07 1795

原创 【NOIP2016提高A组五校联考1】排队

DescriptionSolution比赛的时候其实想到了正确的方法,但是以为这是错的,就没敢打。 首先可以用一个堆来维护空余的优先位置。 然后现在的问题就是,求一个点上面有多少个有值的点。 如果一个点对答案又贡献,那么它的子树的答案都要加1。那么维护dfs序的话,假设这棵子树的范围控制的是[x,y],那么就对x进行加1操作,y+1进行减1操作,然后如果要询问x的答案,那么直接在树状数组中的[

2016-10-04 21:30:01 765 2

原创 【NOIP2016提高A组五校联考1】道路规划

DescriptionSolution仔细的推敲了一下题目,如果a[i]Code#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; const int maxn

2016-10-04 21:21:32 583

原创 【NOIP2016提高A组五校联考1】挖金矿

DescriptionSolution刚看到这题时,还在想怎么贪心,然后很快的打完之后发现贪心是错的。 然后仔细的看了看范围,哈哈,这不是二分吗。 二分出一个mid,然后在所有行里面用mid*j-前缀和然后找一个最大值。 最后把这些最大值加起来,判断一下就好了。Code#include<iostream> #include<cstdio> #include<cstring> #include<

2016-10-04 21:06:18 654

空空如也

空空如也

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

TA关注的人

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