51nod四级题小记

来源:互联网 发布:install ubuntu 编辑:程序博客网 时间:2024/05/16 07:18

1051 最大子矩阵和

思路:最大字段和是维护前缀和,这里也是不同的是维护一块一块的前缀和,枚举矩阵的[L,R],然后再h上就是类最大字段和问题了。

1086 背包问题 V2

思路:裸的多重背包。

1179 最大的最大公约数

题意:给出N个正整数,找出N个数两两之间最大公约数的最大值。例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5。(2 <= N <= 50000)(1 <= S[i] <= 1000000)

思路:枚举每个数的因数,记录下来。出现次数2的因数中最大者即为答案。

1113 矩阵快速幂

思路:裸的矩阵快速幂。

1070 Bash游戏 V4

思路:斐波那契博弈。

题意:有一堆个数为n的石子,游戏双方轮流取石子,满足:
1)先手不能在第一次把所有的石子取完;
2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。
约定取走最后一个石子的人为赢家,求必败态。必败态构成Fibonacci数列。

1202 子序列个数

题意:对于给出序列a,有些子序列可能是相同的,这里只算做1个,请输出a的不同子序列的数量。(1 <= N <= 100000)(1 <= a[i] <= 100000)

思路:dp[i]:以i为结尾的子序列的个数。

1103 N的倍数

题意:一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍数。

思路:鸽巢原理/抽屉原理。

1060 最复杂的数

题意:给出一个n,求1-n中约数个数最多的数。一百万。

思路:爆搜。反素数。

1154 回文串划分

题意:有一个字符串S,求S最少可以被划分为多少个回文串。

思路:回文串嘛。枚举对称轴,dp一下就好了。

1419 最小公倍数挑战

思路:哪怕打表也知道规律了,三个max就解决了,考虑%2,%3的重复。

1108 距离之和最小 V2

思路:各个维度没关系,也就是三个距离之和最小V1的操作的加和。

1105 第K大的数

题意:数组A和数组B,里面都有n个整数。数组C共有n^2个整数,分别是A[0] * B[0],A[0] * B[1] ……A[1] * B[0],A[1] * B[1]……A[n - 1] * B[n - 1](数组A同数组B的组合)。求数组C中第K大的数。

思路:二分第k大的数的值。judge的时候,最简单的做法是枚举行在列上lowerbound出小于等于mid的数有几个。这个应该….有四千六百万的复杂度。俩log呢。数据可能比较弱就冲过去了。讲道理,judge可以从nlogn优化到几乎On。用尺取法。

1449 砝码称重

题意:现在有好多种砝码,他们的重量是 w0,w1,w2,… 每种各一个。问用这些砝码能不能表示一个重量为m的东西。 (2 ≤ w ≤ 10^9, 1 ≤ m ≤ 10^9)。如果能,输出YES,否则输出NO。

思路:首先注意一下这个,砝码称重,砝码左右两个天平都能放。然后就类似两个w进制的数字的减法得到m。然后再考虑每一位减的结果无非是0或1或者不够减要借位。那么。借位的减法结果一定是从w-1到w-2到w-3一直到0才会跳出。judge一下就行了。

1287 加农炮

题意:一个长度为M的正整数数组A,表示从左向右的地形高度。测试一种加农炮,炮弹平行于地面从左向右飞行,高度为H,如果某处地形的高度大于等于炮弹飞行的高度H(A[i] >= H),炮弹会被挡住并落在i - 1处,则A[i - 1] + 1。如果H <= A[0],则这个炮弹无效,如果H > 所有的A[i],这个炮弹也无效。现在给定N个整数的数组B代表炮弹高度,计算出最后地形的样子。

思路:很显然。我们没法对无序数组A进行二分,但是我们能对h数组进行二分,h[i] = max(h[i - 1], a[i]),是一个单调非减的。然后同时维护h数组和A数组的修改就行了。这题也能通过维护区间最大值去做,会比较慢一点,用一个线段树应该就行了,树上走一走query。

1186 质数检测 V2

1110 距离之和最小 V3

题意:轴上有N个点,每个点除了包括一个位置数据X[i],还包括一个权值W[i]。点P到点P[i]的带权距离 = 实际距离 * P[i]的权值。求X轴上一点使它到这N个点的带权距离之和最小,输出这个最小的带权距离之和。(2 <= N <= 10000)。点的位置及权值。(-10^5 <= X[i] <= 10^5,1 <= W[i] <= 10^5)输出最小的带权距离之和。

思路:转换权值为数量,即权值为2,说明这个位置有两个点。然后和距离之和最小 V3又一样了。

1191 消灭兔子

思路:经典贪心。没啥好说的,符合条件的压进堆,弹一个最小的++即可。

1405 树的距离之和

题意:给定一棵无根树,假设它有n个节点,节点编号从1到n。n (n <= 100000)每行一个整数,第i(i = 1,2,…n)行表示所有节点到第i个点的距离之和。

思路:dfs出节点1的答案,然后再dfs一遍的过程中根据贡献度,可以从父节点的答案中得到子节点的答案。

1109 01组成的N的倍数

题意:给定一个自然数N,找出一个M,使得M > 0且M是N的倍数,并且M的10进制表示只包含0或1。求最小的M。
例如:N = 4,M = 100。(1 <= N <= 10^6)

思路:首先结果的最高位一定是1.所以可以以1为根,每次添加0或者1,形成一棵二叉树。这是一个类似不断取模的过程。然后bfs它就行了。这棵bfs树只有最多一百万个节点,因为当%N的结果第二次出现的时候到达叶子节点的长度一定比第一次出现长,即更烂的的结果。所以用它剪枝,N只有最多一百万个取模的结果。

1605 棋盘问题

题意:上帝创造了一个n*m棋盘,每一个格子都只有可能是黑色或者白色的。
每次寻找边长为x的正方形,其中每个格子必须为黑色,然后将这些格子染白。如果谁不能操作了,那么那个人就输了。x只有可能是非2质数或者是1。都用最优策略进行游戏,谁会赢。

思路:因为是非2质数或者1。所以每次只能删掉一个奇数面积的1。因此统计棋盘的1的奇偶就行了。

1686 第K大区间

1682 中位数计数

1107 斜率小于0的连线数量

题意:二维平面上N个点之间共有C(n,2)条连线。求这C(n,2)条线中斜率小于0的线的数量。

思路:二维逆序对。

1076 2条不相交的路径

思路:无向图的边双联通裸题。

1434 区间LCM

题意:LCM(N+1,N+2,….,M-1,M)是LCM(1,2,3,4,…,N-1,N) 的倍数.求最小的M值。1<=N<=1000000。每组数据一行输出,即M的最小值。

思路:想想LCM是什么,是这些数字的素因子的最高次幂的乘积对吧。然后你考虑新的区间的LCM恰好是前者LCM的倍数的时候,更新一个2是最佳方式。(当然会有附加上来的新的素数,但是这是不可避免的)(我觉得我这个讲的很差啊 这题解不行。)

1420 数袋鼠好有趣

题意:有n只袋鼠。每只袋鼠的大小用一个整数表示。一只小袋鼠能装进一只大袋鼠的条件是,大袋鼠的大小至少是小袋鼠的两倍。每只大袋鼠最多可以装一只袋鼠。小袋鼠被装进大袋鼠之后就不能再装其它的袋鼠了。小袋鼠被装进大袋鼠之后就不能被我们看见了。请找出一个装袋鼠的方案,使得被看见的袋鼠最少。(5e5的范围)

思路:最优的情况就是前一半恰好被后一半套着,所以双指针走一走就行了。

1255 字典序最小的子序列

1307 绳子与重物

1412 AVL树的种类

思路:给定AVL树的节点个数n,求有多少种形态的AVL树恰好有n个节点。 (0 < n <= 2000)

思路:dp[i][j]维护有i个结点,高度为j的avl树的种类。

1714 B君的游戏

1717 好数

题意:有n个数 a[1],a[2],…,a[n]开始都是0现在进行操作 t从1~n依次增加每次把下标时t的倍数的数都反转(0变成1,1变成0) 如果最后a[i]为0,那么称此时的i为好数。现在对于给定的n,求这时候的好数个数。(n<=1e15)

思路:水题。你想。每个a[i]只会被自己的因子翻转,完全平方数有奇数个因子,其他有偶数个。over。

1672 区间交

小A有一个含有n个非负整数的数列与m个区间,每个区间可以表示为li,ri。它想选择其中k个区间, 使得这些区间的交的那些位置所对应的数的和最大。(是指k个区间共同的交,即每个区间都包含这一段,具体可以参照样例)(1<=n<=100000,1<=k<=m<=100000)。(0<=ai<=10^9)。

思路:按左端点排序以后,拿堆维护一下右端点就行,容易发现是一个剔除右端点最小的区间更优的贪心做法。

1737 配对

题意:给出一棵n个点的树,将这n个点两两配对,求所有可行的方案中配对两点间的距离的总和最大为多少。(1<=n<=100,000,n保证为偶数)接下来n-1行每行三个数x,y,z表示有一条长度为z的边连接x和y(0<=z<=1,000,000,000)

思路:贡献度。考虑每条边的贡献度是左右结点个数最小值,加和即可。至于构造这样一个图,只需要一个从树的重心打开的图的即可。

1435 位数阶乘

思路:简单组合。给的n位数中如果有9,它能拆成7!*3!*3!*2!,8能拆成7!*2!*2!*2! 。如此类推。

1445 变色DNA

1674 区间的价值 V2

1624 取余最长路

1441 士兵的数字游戏

1391 01串

1677 treecnt

思路:同样我们考虑每条边对答案的贡献度,利用一个容斥。总情况-k个点全在左-k个点全在右。

1670 打怪兽

1281 山峰和旗子

用一个长度为N的整数数组A,描述山峰和山谷的高度。山峰需要满足如下条件, 0 < P < N - 1 且 A[P - 1] < A[P] > A[P + 1]。现在要在山峰上插上K个旗子,并且每个旗子之间的距离 >= K,问最多能插上多少个旗子(即求K的最大值)。两个山峰之间的距离为|P - Q|。

思路:裸的二分。

1718 Cos的多项式

题意:2cos(nx)似乎可以表示成2cos(x)的一个多项式。现在给定n(n<=1e15),输出各项系数的和。样例解释:2*cos(3x)=(2*cosx)^3-3*(2*cosx),系数为1和-3,他们的和为-2。

思路:…有点意思啊。令fn2cos(nx)的系数之和。那么利用数cos(x+y)=cosxcosysinxsinycos(xy)=cosxcosy+sinxsiny,可以得到fn+fn2=f1fn1,即fn=f1fn1fn2

1478 括号序列的最长合法子段

1400 序列分解

1205 流水线调度

1366 贫富差距

1799 二分答案

1358 浮波那契

1732 51nod婚姻介绍所

1491 黄金系统

1503 猪和回文

1390 游戏得分

1791 合法括号子段

1557 两个集合

1350 斐波那契表示

1821 最优集合

1093 骆驼和香蕉

1655 染色问题

1574 排列转换

1460 连接小岛

1282 时钟

1804 小C的多边形

1280 前缀后缀集合

1509 加长棒

1153 选择子序列

1351 吃点心
1523 非回文

1422 沙拉酱前缀

1243 排船的问题

1453 抽彩球

1490 多重游戏
1524 可除图的最大团

1335 子序列翻转
1607 卷积和
1455 宝石猎人
1675 序列变换
1535 深海探险
1448 二染色问题
1112 KGold
1487 占领资源
1484 猜数游戏
1388 六边形平面
1438 方阵与完全平方数
1320 合法尾数序列
1603 限高二叉排列树
1319 跳跃游戏

1337 翻转游戏

1473 等幂映射

1464 半回文

1316 回文矩阵

1580 铺管道

原创粉丝点击