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)
思路:枚举每个数的因数,记录下来。出现次数
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。
思路:…有点意思啊。令
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 铺管道
- 51nod四级题小记
- 51nod五级题小记
- 默慈金数学习小记 && 51nod 1556 计算
- 51Nod
- 51Nod
- 51nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- npm介绍及常见命令
- DVWA-master新手指南之SQL Injection(二)
- SpringMVC上传文件的三种方式
- CSS3自定义滚动条样式
- Linux命令参考手册
- 51nod四级题小记
- 剑指offer63二叉搜索树的第k个节点
- [HDU
- Leetcode72. Edit Distance
- 神经网络和深度学习(三)——反向传播工作原理
- sort -- 文本排序工具
- Asteroids
- Hadoop学习笔记(一)
- 关于spring的配置文件总结