AcWing-94.递归实现排列型枚举
¶首先来首歌曲来放松一下吧!
题目链接:94. 递归实现排列型枚举
¶题目背景:
¶题目描述
把 1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。
¶输入格式
一个整数n。
¶输出格式
按照从小到大的顺序输出所有方案,每行1个。
首先,同一行相邻两个数用一个空格隔开。
其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。
¶数据范围
1≤n≤9
¶输入样例:
13
¶输出样例:
¶1234561 2 31 3 22 1 32 3 13 1 23 2 1
¶题目分析:
¶题目要求:
全排列,字典序小的在前!
¶解题思路:
具体看代码以及注释和介绍!
¶题解:
¶题解一:最普通的递归:
不解释了!没什么说的,极易理解!
12345678910111213141516171819202122232425262728293031323334#include <iostream> using namespace std;int n;int a[10];bool visit[10];void dfs(int u){ if(u == n ...
AcWing-93.递归实现组合型枚举
¶首先来首歌曲来放松一下吧!
题目链接:93. 递归实现组合型枚举
¶题目背景:
递归实现,看完本篇你大概将知道递归转化为非递归方法!
¶题目描述
从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。
¶输入格式
两个整数 n,m ,在同一行用空格隔开。
¶输出格式
按照从小到大的顺序输出所有方案,每行1个。
首先,同一行内的数升序排列,相邻两个数用一个空格隔开。
其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如1 3 5 7排在1 3 6 8前面)。
¶数据范围
n>0
0≤m≤n
n+(n−m)≤25
¶输入样例:
15 3
¶输出样例:
123456789101 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5
思考题:如果要求使用非递归方法,该怎么做呢?
¶题目分析:
¶题目要求:
¶解题思路:
一篇好理解的题解,点击这里!
¶题解:
¶题解一:最普通的递归:
不解释了!
12345678910111213141516171819202 ...
AcWing-92.递归实现指数型枚举
¶首先来首歌曲来放松一下吧!
题目链接:92. 递归实现指数型枚举
¶题目背景:
多种做法!
¶题目描述
从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。
¶输入格式
输入一个整数n。
¶输出格式
每行输出一种方案。
同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。
对于没有选任何数的方案,输出空行。
本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。
¶数据范围
1≤n≤15
¶输入样例:
13
¶输出样例:
12345678322 311 31 21 2 3
¶题目分析:
¶题目要求:
输出任任意位的组合(从小到大),包括0位组合(即输出空行),不限制输出顺序!
¶解题思路:
详见下方四种解法:
一篇好理解的题解,点击这里!
¶题解:
注意:选择0位也是一种情况,千万别忘记!要输出一个空行!
¶解法一:本人能想到的最粗糙的做法:
1234567891011121314151617181920212223242526272829303132333435#include <iostream> using ...
AcWing-91.最短Hamilton路径
¶首先来首歌曲来放松一下吧!
题目链接:91. 最短Hamilton路径
¶题目背景:
这对我来说是一道难题,经过我一直理解,看题解,看yxc大神视频,反复多次,一点点的,终于明白了这个思想并且可以自己独立写出来!
坚持!反复!终将成功!
此题,时间限制为 3s !
¶题目描述
给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。
¶输入格式
第一行输入整数n。
接下来n行每行n个整数,其中第ii行第jj个整数表示点ii到jj的距离(记为a[i,j])。
对于任意的x,y,z 数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]>=a[x,z]。
¶输出格式
输出一个整数,表示最短Hamilton路径的长度。
¶数据范围
1 ≤ n ≤ 20
0 ≤ a[i,j] ≤ 10 7
¶输入样例:
12345650 2 4 5 12 0 6 5 34 6 0 8 35 5 8 0 51 3 ...
AcWing-90.64位整数乘法
¶首先来首歌曲来放松一下吧!
题目链接:90. 64位整数乘法
¶题目背景:
¶题目描述
求 a 乘 b 对 p 取模的值。
¶输入格式
第一行输入整数a,第二行输入整数b,第三行输入整数p。
¶输出格式
输出一个整数,表示a*b mod p的值。
¶数据范围
1≤a,b,p≤1018
¶输入样例:
123345
¶输出样例:
12
¶题目分析:
¶题目要求:
两个十八位数相乘,然后模十八位数!
¶解题思路:
直接算肯定会超出数据类型的最大范围,所以不能直接算!
使用高精度乘法去算,显然可以,但是没必要,本题不需要最后结果,需要的是模p 的结果,所以可以借助快速幂思想:
参考这里:AcWing-89.a ^ b
类似的:十八位数乘法会溢出,那么加法肯定不会溢出,所以就是要将乘法转化为加法:
a * b
a + a + a + a + a + a + a … + a
a * 1 = 1a
a * 2 = 2a
a * 4 = 4a
a * 8 = 8a
…
和之前一样同样是倍增思想!
快速幂是一个平方,这个就是一直乘2即可!
yxc大神的视频讲解:点击这 ...
AcWing-89.a ^ b
¶首先来首歌曲来放松一下吧!
题目链接:89. a^b
¶题目背景:
¶题目描述
求 a 的 b 次方对 p 取模的值。
¶输入格式
三个整数 a,b,在同一行用空格隔开。
¶输出格式
输出一个整数,表示a^b mod p的值。
¶数据范围
0≤a,b,p≤109
¶输入样例:
13 2 7
¶输出样例:
12
¶题目分析:
¶题目要求:
求a 的 b 次方 模 p 的值。
¶解题思路:
直接循环求a 的 b 次幂,很明显会超时,C++ 一秒大概能运行10的7次方到10的8次方次之间,本题数据为10的9次方,肯定超时!
所以需要用到快速幂来计算:
快速幂思想如图:
假如计算3 的 7 次方,7的二进制为111,如图,3的7次相当于3的1次,2次,4次,即3的2的0次+1次+2次,而3的2次是3的1次的平方,4次是2次的平方,所以这样看来,7次本来要算7回,这样只需要算三次即可,当然这里数据较小,假如是3的1000000次,只需要计算20次左右!可见提高了多少速度。
具体思想:对次数取最后一位,如果是奇数(即对应二进制位为1),就去累乘,如果是偶数(即二进制位为0), ...
AcWing-788.逆序对的数量
¶首先来首歌曲来放松一下吧!
题目链接:788. 逆序对的数量
¶题目背景:
¶题目描述
给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。
逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。
¶输入格式
第一行包含整数n,表示数列的长度。
第二行包含 n 个整数,表示整个数列。
¶输出格式
输出一个整数,表示逆序对的个数。
¶数据范围
1≤n≤100000
¶输入样例:
1262 3 4 5 6 1
¶输出样例:
15
¶题目分析:
¶题目要求:
题目要求求出逆序对的数目,所谓逆序对就是后面的数小于前面的数就是一组!
¶解题思路:
首先,应该想到逆序对不就是从小大大排序时,需要交换的两者吗?所以可以使用冒泡排序,在进行交换时就进行++记录。
但是:很明显冒泡排序复杂度太大,是O(N) 的,一定超时。
所以又想到归并排序,归并排序也有逆序对的交换,所以也可以进行记录。时间复杂度为O(NlogN)!
归并排序模板!点击这里!
稍微解释一下归并排序,先分后合的思想:
...
AcWing-1326.军训队列
¶首先来首歌曲来放松一下吧!
题目链接:1326. 军训队列
¶题目背景:
¶题目描述
有 n 名学生参加军训,军训的一大重要内容就是走队列,而一个队列的不整齐程度是该队中最高的学生的身高与最矮的学生的身高差值的平方。
现在要将 n 名参加军训的学生分成 k 个队列,每个队列的人数可以是任意非负整数。
在安排队列时希望所有队列的不整齐度之和尽量小,请问不整齐度之和最小可以是多少?
¶输入格式
第一行两个整数 n,k,表示学生人数和队列数。
第二行 n 个整数,依次表示每名学生的身高。
¶输出格式
一个整数表示答案。
¶数据范围
对于10%的数据,k=1;
对于另外10%的数据,k=2;
对于另外10%的数据,k=3;
对于另外10%的数据,k=4;
对于另外10%的数据,1≤n,k≤5;
对于另外10%的数据,1≤n,k≤10;
对于另外20%的数据,1≤n,k≤100;
对于另外5%的数据,n=k=500;
对于所有的数据,1≤n,k≤500,0≤ 学生身高 ≤200
¶输入样例:
123 2170 180 168
¶输出样例:
¶14
¶题目分析:
这对我来说是一 ...
AcWing-1324.五子棋
¶首先来首歌曲来放松一下吧!
题目链接:1324. 五子棋
¶题目背景:
¶题目描述
小 A 和小 B 在下五子棋。
五子棋是在一个由网格构成的棋盘内进行的。
网格有 15 行 15 列,共有 225 个交叉点。
小 A 先手执黑棋,小 B 后手执白棋。
两人轮流下棋,每次下棋都将一个自己的棋子放在棋盘上一个空白的交叉点上。
然而,由于小 A 和小 B 都不知道五子棋的胜利条件,所以即使有一方已经胜利了,他们仍然会继续下棋。
现在想请你帮忙分析一下,所下的棋局是在第几步结束的。
当然,也有可能他们最终仍然没有分出胜负,这时请判定他们平局。
五子棋的胜利条件是这样的:当同一行或同一列或同一斜线(即与网格线成 45° 角的直线)上连续的五个或五个以上交叉点放有同色棋子的时候,立即判定使用该颜色棋子的玩家获得胜利,游戏结束。
¶输入格式
第一行输入一个正整数 n,表示双方总共下了多少步棋。
接下来 n 行,每行两个正整数。其中,第 i 行的两个数 x,y 表示第 i 步的棋子下在了第 x 条横线和第 y 条竖线的交叉点上。若 i 为奇数,则这个棋子是黑棋,否则是白棋。
¶输 ...
人一生需要花多少钱
¶一首歌曲送上
我们都是语言的巨人,行动的矮子!
¶分享偶然看到的四张图:
看到图后,我想了很多,当然是乐观的想,本人并不是那种悲观的人!
人一生花费的钱有这么多,现在不努力更待何时!
每天努力一点点,不要管于你无关的事情!
又想到了自己博客首页的座右铭:
你现在的努力,是为了以后有更多的选择!
¶一则启示:
俄罗斯方块告诉我们,合群跟随大众,随波逐流,我们就会消失,变得没有自我 。贪吃蛇告诉我们,不断的吸收负能量,不断的懒惰,害死我们的终究是自己 。愤怒的小鸟告诉我们,嘲笑我们的终究没有我们具有选择性,他们只有嘲笑的能力而我们具有打败别人的能力,变成猪的人类也只会嘲笑努力的人。
¶其实自律很简单:
其实自律很简单,需要认清自己,再朝一个方向去行动。刚开始要给自己时间去适应,慢慢的慢慢的你就会习惯成自然。也不要刻意的强求自己定要做什么什么然后没做成而感到懊恼,在努力的过程中需要付出很多心血和汗水不要放弃、不要悲伤。终有一天你的目标会开花结果。不要每天看一些励志视频就为自己打一针鸡血,努力一下又开始堕落、迷茫。加油陌生人,一起朝着梦想努力[打call][打cal ...
JavaScript教程系列之面向浏览器
¶首先来首歌曲来放松一下吧!
¶一、浏览器对象(BOM)
BOM是一套操作浏览器的API(接口/方法/属性)
常见的BOM对象:
window:代表整个浏览器窗口(window是BOM中的一个对象,并且是顶级的对象)
Navigator :代表浏览器当前的信息,通过Navigator我们可以获取用户当前使用的是什么浏览器
Location: 代表浏览器当前的地址信息,通过Location我们可以获取或者设置当前的地址信息
History:代表浏览器的历史信息,通过History我们可以实现上一步/刷新/下一步操作(出于
对用户的隐私考虑,我们只能拿到当前的浏览记录,不能拿到所有的历史记录)
Screen:代表用户的屏幕信息
¶1、window对象
window对象不但充当全局作用域,而且表示浏览器窗口。
还记得之前的什么alert,console啥的没,那都是全局对象window的属性或者成员!
window对象的成员加不加window都一样,不加默认就是window!
¶innerWidth 和 innerHeight
获取浏览器窗口的内部宽度和高度。内部宽 ...
JavaScript教程系列之面向对象编程
¶首先来首歌曲来放松一下吧!
有人这样说:这种高大上的东西都是造火箭才用得上的,平时干的都是拧螺丝的活当然用不上咯!
但还是得知道并掌握。。。。!
class继承需要掌握,原型继承知道就好了…
¶一、面向对象编程概述
JavaScript不区分类和实例的概念,而是通过原型(prototype)来实现面向对象编程。
¶1、通过__proto__ 来指向Student,并且继承Student的所有属性!
JavaScript它没有“Class”的概念,所有对象都是实例,所谓继承关系不过是把一个对象的原型指向另一个对象而已。
12345678910111213141516var Student = { name: 'Robot', height: 1.2, run: function () { console.log(this.name + ' is running...'); }};var xiaoming = { name: '小明'};xiaoming.__proto__ = Student;xiaoming.name ...