算法模板
文章平均质量分 58
大千SS
我爱大风和烈酒,也爱孤独和自由。
展开
-
大数减法
这里我们来看看大数减法,思想不是很难,看了代码你就知道了。主要思想:把每一位相减,减完之后从低位判断是否小于0,若小于0向前一位借一,前一位减一即可。下面是代码:#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<iostream>...原创 2018-06-11 20:32:54 · 270 阅读 · 0 评论 -
插入排序
#include<cstdio>void InsertSort(int a[],int n){ int i,j; for(i=2;i<=n;i++){ if(a[i-1]>a[i]){ a[0]=a[i];//用a[0]来存储要插入的值 a[i]=a[i-1]; for(j=i-2;a[j]>a[0];j--){ a[j+1...原创 2019-01-05 21:57:21 · 177 阅读 · 0 评论 -
选择排序
#include<cstdio>void SelectSort(int a[],int n){ for(int i=0;i<n-1;i++){ int mix=i; for(int j=i+1;j<n;j++){ if(a[j]<a[mix]){ mix=j; } } if(mix!=i){ int t=a[i];...原创 2019-01-05 22:12:19 · 150 阅读 · 0 评论 -
51Nod-1072-威佐夫游戏
有2堆石子。A B两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量,问最后谁能赢得比赛。 例如:2堆石子分别为3颗和5颗。那么不论A怎样拿,B都有对应的方法拿到最后1颗。 Input 第1行:一个数T,表示后面用作输入测试的数...原创 2018-06-10 01:52:05 · 174 阅读 · 0 评论 -
[51nod]1006 最长公共子序列Lcs
这个题如果只是让输出最长公共子序列的长度,就比较简单,但是让输出最长公共子序列,增加了难度。给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。 Input ...原创 2018-06-10 01:37:55 · 203 阅读 · 0 评论 -
Nim游戏(尼姆博弈)
这里是尼姆博弈的模板,前面的博弈问题的博客里也有,这里单列出来。 有N堆石子。A B两个人轮流拿,A先拿。每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N及每堆石子的数量,问最后谁能赢得比赛。 例如:3堆石子,每堆1颗。A拿1颗,B拿1颗,此时还剩1堆,所以A可以拿到最后1颗石子。 I...原创 2018-06-09 21:18:59 · 481 阅读 · 0 评论 -
51Nod 1134 最长递增子序列
这也是一个比较经典的问题。给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的)例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。Input第1行:1个数N,N为序列的长度(2 <= N <= 50000)第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)Outp...原创 2018-06-07 22:07:27 · 147 阅读 · 0 评论 -
快速幂的类似问题(51Nod 1008 N的阶乘 mod P)
下面我们来看一个容易让人蒙圈的问题:N的阶乘 mod P。51Nod 1008 N的阶乘 mod P看到这个可能有的人会想起快速幂,快速幂是N的M次方 mod P,这里可能你就要说你不会做了,其实你会,为什么呢,只要你明白快速幂的原理,你就会发现他们两个其实差不多是同一个问题。重要原理:积的取模=取模的积再取模。快速幂不过是一直乘的相同的的数,这里仅仅是改成乘以不同的数而已。题目:输入N和P(P为...原创 2018-06-09 18:50:09 · 461 阅读 · 0 评论 -
快速幂(51Nod1046 A^B Mod C)
快速幂也是比较常用的,原理在下面用代码解释,我们先看题。给出3个正整数A B C,求A^B Mod C。 例如,3 5 8,3^5 Mod 8 = 3。 Input 3个正整数A B C,中间用空格分隔。(1 <= A,B,C <= 10^9) Output 输出计算结果 Sample I...原创 2018-06-09 18:36:16 · 229 阅读 · 0 评论 -
51Nod 1067 Bash博弈V2
这道题告诉我,一定要去尝试,去推算,不要动不动就找度娘要答案。(惭愧惭愧)既然是博弈问题,按理我们应该找出规律,怎么找呢,推,把前几项写出来找规律,动手很重要。上题:1067 Bash游戏 V2基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注有一堆石子共有N个。A B两个人轮流拿,A先拿。每次只能拿1,3,4颗,拿到最后1颗石子的人获胜。假设A B都非...原创 2018-06-14 09:16:08 · 183 阅读 · 0 评论 -
51Nod 1073 约瑟夫环
听起来很高大上的题啊!有的题就是这样,但是重要的还是一个结论,只要知道结论就能做出来,但我还是建议多去看看原理,这样能记忆的更深。关于约瑟夫环问题的详细解释,可以看这个:约瑟夫环详解我下面直接给代码吧,有两种方式:递归和迭代。先看递归的代码:#include<cstdio>int joseph(int m,int n){ if(m==1) return 0; else retur...原创 2018-06-12 22:57:24 · 186 阅读 · 0 评论 -
51Nod1085 0-1背包(一维和二维数组实现)
背包是典型的动态规划问题,关于背包问题的详解,推荐博客:点击打开链接(这篇博客有点错误,代码for循环里错了,不过讲解 的很详细)题目如下:在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数)。求背包能够容纳的最大价值。Input 第1行,2个整数,N和W中间用空格隔开。N为物品的数量,W为背包...原创 2018-06-12 21:19:51 · 246 阅读 · 0 评论 -
归并排序(包含逆序数对的个数51Nod1019)
归并排序是效率很好的排序方式,和快排效率一样高,但在稳定性上优于快排,下面我们来介绍归并排序。归并排序运用递归将序列不断二分(其原理就是分治),就像一棵树不断向下分支,最后分到只剩一个元素,这样这个元素就可当做有序的,因为只有一个元素嘛。然后是合并,怎么分出来就怎么合并回去,不过既然是排序,那么合并的时候就需要比较一下大小了。下面为了更好的理解,我们来看一张图片。(这张图是借用的,很感谢制图人)这...原创 2018-06-12 11:03:28 · 213 阅读 · 1 评论 -
快速筛法求素数
这个有点难理解,我也组织不好语言,再次转发一波。转载出自https://blog.csdn.net/stack_queue/article/details/53560887求素数是程序设计比赛中经常遇到的问题,最基本的方法是通过素数的定义直接判断,只能被1和它本身整除的数就是素数了。这种方法适合判断单个数是否为素数,当要求一个范围内素数而这个范围又比较大时,这种方法就不太使用了,甚至程序要运行几分...转载 2018-06-11 21:35:24 · 317 阅读 · 0 评论 -
51Nod1049 最大子段和
我们来先看题:N个整数组成的序列a1,a2,a3,…,an,求该序列如ai+ai+1+…+aj的连续子段和的最大值。当所给的整数均为负数时和为0。 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。 这个题也许你没有什么思路,上网上查有许多会告诉你动态规划、分治什么了,当然这些都是必备的算法,别的地方说的也不错,但是我感觉这个题只要仔细看看代码...原创 2018-06-11 21:19:19 · 180 阅读 · 0 评论 -
51Nod大数加法(两个数正负都可)
很多大数的问题都运用模拟的思想,但是这个说一样也一样,但是难度较大,很麻烦,我自己谢写了100多行的代码,感觉很对,但就是WA。其实个人感觉C和C++没有大数类,是对人思想和算法的考验,但是有时候做不出来真的很不爽,下面给出Java大数类的代码。import java.math.*;import java.util.*;public class A { public static void...原创 2018-06-11 20:41:01 · 241 阅读 · 0 评论 -
冒泡排序(从前到后、从后到前)
#include<cstdio>#include<algorithm>using namespace std;void BubbleSort(int a[],int n)//从小到大 { for(int i=0;i<n-1;i++){ for(int j=0;j<n-1-i;j++){//从前向后比较,将最大的移动到最后面,后面逐渐有序 ...原创 2019-01-05 22:27:22 · 3079 阅读 · 0 评论