
初级算法竞赛练习笔记
hjl_heart
请多指教~
展开
-
递推题——错排公式
这几天都做到了递推题,而且都用到了错排公式,所以在此记一下(不然我脑子里根本记不住,蠢哭...)以HDU 2048为例,请看题:em...由于本人一点也不擅长递推题,所以直接把别人的分析抄上来吧....(侵权即删)若有n张票,则其所有的排列一共有= n! 种排列方式。即所求问题的分母是n!现在的问题就是n张票的错排方式有多少种?1.首先我们考虑如果n-1个人拿的都不是自...原创 2020-03-20 14:40:35 · 437 阅读 · 0 评论 -
HDU 2063过山车 ——二分图最大匹配问题
在HDU 2063 过山车中,我们遇到的是二分图最大匹配问题。那么什么是二分图最大匹配呢?我找了很多资料,发现下面的博主写的很详细,在此贴上文章链接。https://blog.youkuaiyun.com/qq_38956769/article/details/80238896请务必先看懂文章再来做这道题。下面是我看懂后写下的AC代码:#include<iostream>#in...原创 2020-03-19 12:20:46 · 156 阅读 · 0 评论 -
codeup 问题 C: 【递归入门】组合+判断素数
题目描述已知 n 个整数b1,b2,…,bn以及一个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34。 现在,要求你计算出和为素数共有多少种。例如上例,...原创 2020-01-16 12:05:51 · 434 阅读 · 0 评论 -
C/C++ 产生随机数的函数
C语言中有可以产生随机数的函数,需要添加 stdlib.h 头文件和 time.h 头文件。 srand((unsigned) time(NULL)); //初始化随机种子 for(int i = 0; i < 10; i++) printf("%d ", rand());其中,rand()函数只能产生[0, RAND_MAX]范围内的整数(RAND_MAX是stdlib....原创 2020-01-07 20:23:28 · 1101 阅读 · 0 评论 -
棋盘覆盖问题
题目在这:http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=2000思路:利用分治法,将棋盘切为4块,左上、右上、左下、右下。其中特殊方格必然处于一块子棋盘中,将无黑方格的棋盘的相邻位置标记为同一编号。如图,假设(1,1)是特殊方格.我们按照红线将其均分为四块,在含有特殊方格的那块中继续采用分治法。在其余块中先将它们的相邻格子标记为同...原创 2019-03-15 10:46:28 · 613 阅读 · 0 评论 -
CCF 201812-2小明放学
题目背景 汉东省政法大学附属中学所在的光明区最近实施了名为“智慧光明”的智慧城市项目。具体到交通领域,通过“智慧光明”终端,可以看到光明区所有红绿灯此时此刻的状态。小明的学校也安装了“智慧光明”终端,小明想利用这个终端给出的信息,估算自己放学回到家的时间。问题描述 一次放学的时候,小明已经规划好了自己回家的路线,并且能够预测经过各个路段的时间。同时,小明通过学校里安装的“智慧光明”...原创 2019-03-13 22:16:38 · 315 阅读 · 0 评论 -
Uva 10129 单词
本题...看的是刘汝佳的书,本来一开始以为是用单词作为结点,然后直接dfs遍历来着...但是发现这样做超时了。。。超时代码:import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); ...原创 2019-03-03 20:14:13 · 233 阅读 · 0 评论 -
用DFS解拓扑排序
这里以一个例子为例:这是一个无环有向图,求出它是否有拓扑排序。思路是:1.随便挑一个未访问的点入栈,这里以a为例,遍历a的出度的有向边,则遍历到b,再遍历b的出度的有向边,发现没有了。即此时深度搜索到头了,那么把b出栈,并放入t数组尾部. 2.然后栈中只有a了,再找是否还有和a相连的有向边。发现没有了。那么再次进行步骤1。依次递归下...原创 2019-03-02 20:50:19 · 3472 阅读 · 1 评论 -
CCF2018.9——2 买菜
记得当时做这道题完全没思路,不知道怎么回事就得了10分。直到今天才准备回顾一下,再次学习算法。。。想想还是很羡慕那些算法好的人。这里看了别人的思路,看了好一会儿自己才理解了...先上题目:问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车。具体的,对于小H来说有n个不相...原创 2019-02-28 20:27:19 · 181 阅读 · 0 评论 -
利用分治法求解最大子数组和
一个数组的最大子数组和可能存在于三种情况中:1. 该数组的左子数组中2.该数组的右子数组中3.可能横跨左右子数组所以,我们可以将问题分解成一个个的子问题,其中情况1和2可用递归求解,而情况3则需要计算s1=max{} (1 <= i <= n/2), s2=max{} (n/2+1 <= j <=n),其中情况3中s1必然包含了,s2中必然包含了,因...原创 2018-04-20 23:12:42 · 1511 阅读 · 0 评论 -
UVa455
题目简述 输入一个字符串,若该字符串可以由某个长度为K的字符串重复多次得到,则为周期串。求其最小的K #include<iostream>#include<cstring>#define maxn 80 + 10using namespace std;char s[maxn];//judge用于判断t是否是周...原创 2019-01-18 18:03:01 · 287 阅读 · 0 评论 -
用于字符串匹配的KMP算法
在这先介绍字符串中前缀、后缀的概念,首先前缀是必包含第一个元素,不包含最后一个元素的;而后缀是必包含最后一个元素,不包含第一个元素的。一个字符串的前缀后缀是一个集合,可以有很多个。例如,数组[b,a,b,a,b]中,前缀有{b},{b,a},{b,a,b},{b,a,b,a};后缀有{b},{a,b},{b,a,b},{a,b,a,b}其中前缀和后缀的最长匹配度,即为它们最长能相同的字符数...原创 2018-08-31 23:42:27 · 183 阅读 · 0 评论 -
矩阵旋转
描述有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。注意:不要使用缓存矩阵输入第一行包含一个整数N。(1 <= N <= 500)随后的N行每一行都有N...原创 2018-08-22 16:04:22 · 704 阅读 · 0 评论 -
Top K问题 ----堆排序
问题大致描述:在海量数据中选出前K个最大的数据输入: 第一行:输入K,表示要求选出的K个最大的数 第二行:输入一个数 ...... 第n-1行:输入一个数 第n行:输入-1表示结束(其中K要<=输入的个数)输出: 输出前K的最大的数 思路:因为要在海量的数据中选出K个数,所以可以利用堆排序,建立小根堆,在用...原创 2018-08-18 20:24:00 · 844 阅读 · 0 评论 -
在整型数组中找到两个数的和等于一个指定数
描述给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要输出这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。你可以假设数组递增有序。请在O(N)时间内完成。 例如:给出数组[2,7,11,15],以及目标target,则输出[0,1]思想:利用HashMap,将数组中元素值(这个做Key)与下标(这个做value...原创 2018-08-09 17:08:36 · 3553 阅读 · 0 评论 -
寻找旋转数组中的某个元素
描述输入一个递增排序的数组(元素不重复)的一个旋转(次数不详),找出某个元素.输入第一行:N,数组的长度第二行:N个整数,作为数组的元素,空格分开第三行:要查找的关键字K输出关键字K的下标,如果没有找到,输出-1样例输入56 1 2 3 41样例输出1首先我们需要了解什么是旋转数组旋转数组是:将包含 n 个元素的数组向右旋转 k 步。例如...原创 2018-08-09 15:56:00 · 1272 阅读 · 0 评论 -
《算法竞赛入门经典》习题练习之习题2-4 倒三角形
输入正整数n<=20,输出一个n层的倒三角形,例如n=5时输出如下:######### ####### ##### ### # 想法: 一看到这类题就知道需要找规律。所以可发现规律:从下向上看成正立的三角形的话发现每层的#标记分别为1、3、5、7、9等等,即从下向上看第i层(假设i从1开始计数)的#标记有2*i-1个。所以当看成倒立的三角形时第i层的#标记一共有2*(n-i+1...原创 2018-02-11 16:47:27 · 476 阅读 · 0 评论 -
《算法竞赛入门经典》上机练习之习题2-1 位数
输入一个不超过109的正整数,输出它的位数。例如 12735 的位数是5。请不要使用任何数学函数,只用四则运算和循环语句实现。 想法:由于这是一个十进制数,假设数为abcd,会自然联想到abcd=a*103+b*102+c*101+d*100,所以只需判断:1. 输入的数除以10的余数不为0。若暂时只考虑这一个条件,我们发现当数是10的整数倍时(如10、100...)将无法满足条件,所以必须有第二...原创 2018-02-11 15:37:47 · 325 阅读 · 0 评论