01 2021 档案
摘要:判断一个大数是不是素数。 引入费马小定理:对于任意的a<n 如果a^(n-1)=1(mod n)成立,那么我们认为p是一个素数。 但是求一个2^n,当n很大的时候,就不行啦。 于是用幂模运算(快速幂取模):(a^b)%c = ((a%c)^b)%c 还看到了一种做法,挺好玩: 如果 a^(n-1)%
阅读全文
摘要:巴什博弈 今天打比赛的时候做到的,下来去看了一些资料,感觉蛮有意思的(学好了可以用来坑钱) 两个顶尖聪明的人在玩游戏,有n个石子,每人可以随便拿1−m个石子,不能拿的人为败者,问谁会胜利。 当石子有1−m个时,毫无疑问,先手必胜。 当石子有m+1个时,先手无论拿几个,后手都可以拿干净,先手必败。 当
阅读全文
摘要:有时候做题需要优化程序,经常遇到有重复的计算,比较影响时间复杂度,于是这里引入容斥原理。 先让我们来看看百度对他的解释: 具体是通过数学归纳法来证明的。 码道题: https://www.51nod.com/Challenge/Problem.html#problemId=1284
阅读全文
摘要:先在小区间DP得到最优解,再合并小区间求大区间最优解,一般把左右两个相邻的子区间合并,需要从小到大枚举所有可能的区间。 https://vjudge.net/problem/51Nod-1021 先举个栗子: 有一二三堆石子,这个时候第一步有两种合并的方法,分别是1和2合并,2和3合并,那么最后应该
阅读全文
摘要:http://120.78.128.11/Problem.jsp?pid=1852 一开始我想,从上往下的话,可以用递归,搜索(dfs)所有可能的路径,代码如下: int dfs(int i,int j){ if(i==n)//递归到最后一层时返回 return a[i][j];//a[i][j]存
阅读全文
摘要:最长递增子序列(LIS) http://120.78.128.11/Problem.jsp?pid=1388 http://acm.hdu.edu.cn/showproblem.php?pid=1257 最长递增子序列,例如X={5,6,7,4,2,8,3},它的最长递增子序列为{5,6,7,8},
阅读全文
摘要:最长公共子序列(LCS) 放题: http://acm.hdu.edu.cn/showproblem.php?pid=1159 首先,子序列是在给定序列中删去若干元素后得到的序列,例如X=(A,B,C,D,E),那么(A,B,D)就是X的子序列,那(A,B,D)是子串吗?不是,子串的元素在原序列中是
阅读全文
摘要:0/1背包 如果每个物体可以切分,称为一般背包问题,用贪心法求最优解,从最大的最多的开始。 如果每个物体不可分割,称为0/1背包问题。0和1代表装入背包和不装入背包。 举个栗子:有4个物品,其重量分别是2、3、6、5,价值分别为6、3、5、4,背包的容量为9。 先定一个二维数组dp[i][j],i代
阅读全文
摘要:硬币问题 n种硬币,面值v1,v2...vn,数量无限,输入s,使最少的硬币组合之和为s。(贪心解决的硬币问题使特殊面值,此处面对任意面值) Min[i]是金额i对应的最少硬币数量,易得Min[i]=min(Min[i],Min[i-1]+1)。(如果面值是1的话) 从Min[i-1]到Min[i]
阅读全文
摘要:分治法 把大问题化成小问题逐个解决,可以优化算法复杂度(局部的优化有利于全局,一个问题的解决,其影响力扩大了k倍,即扩大到了全局)。 归并排序 (1)分解:把原来无序的数列分成两部分,对每个部分再继续分解成更小的两部分,直到子序列只包含1个数,这个过程用递归实现(在归并排序中,只是简单地把数列分成两
阅读全文
摘要:http://www.fjutacm.com/Problem.jsp?pid=2411 看到这题,我第一反应简单啊,刷刷刷把代码敲好交了一发 #include<stdio.h> #include<string.h> int main() { char s1[200000],s2[200000],s3
阅读全文
摘要:http://www.fjutacm.com/Problem.jsp?pid=1861 接上一篇,因为变量设太多脑壳昏了,半天没a出来... 理一理思路,把所有情况挨个判断一下就可以了 #include<stdio.h> int main() { int x,y,a,b; char s[10],m,
阅读全文
摘要:今天看了下模拟的题。模拟就是给你一个目标让你(建立数学模型)通过代码去实现它。 感觉大部分都还比较简单。 做模拟啊,读题很重要,主要是分析题目的要求。 http://bailian.openjudge.cn/practice/3750/ 啊,就比如说这道题(当然我没做),能体会到阅读理解的绝望吗 正
阅读全文
摘要:ceil()函数用于求不小于 x 的最小整数,即向上取整。 头文件:include<math.h> double ceil(double x); 参数 x 是一个双精度数值。 返回值:不小于 x 的最小整数。 floor()函数用于求不大于x的最大整数,即向下取整。 round()函数用于四舍五入。
阅读全文
摘要:处理大数可以用同余。 公式: (a*b)%c = ((a%c)*(b%c))%c (a+b)%c = ((a%c)+(b%c))%c http://www.fjutacm.com/Problem.jsp?pid=2424 简单的同余,直接用就行了。 然后一般可以按位读入取模。 http://www.
阅读全文
摘要:今天做题,有道题嗑了好久(不是题难,脑子问题,再问自鲨)然后逛(zhao)博(ti)客(jie)的时候看见有个没见过的东西,记一下。 判断字符串是否全为数字 ( isdigit()库函数 ) #include <bits/stdc++.h> using namespace std; int main
阅读全文
摘要:判断奇偶,二进制的运算,组合的遍历......等问题都要用到位运算,所以做个小记录。 & 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。 | 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1。 ^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1。 ~ 取反
阅读全文
摘要:http://www.fjutacm.com/Problem.jsp?pid=1620 sort很方便,遇到排序题我就不受控制往sort靠,记几个知识点方便以后找。 #include<algorithm> using namespace std; sort(a,a+n);//sort(a,a+n,c
阅读全文