杂七杂八的知识
阿聊
愿我千帆过尽,归来仍是少年
展开
-
费马小定理
证明: 由欧拉定理可知 当gcd(a,n)==1 时 我们有 Aφ(n-1)≡ 1(mod n) ;所以 我们有 A*Aφ(n-2) ≡ 1(mod n) 所以Aφ(n-2) 就是A关于mod n的逆元 #include <iostream>#include <cstdio>using namespace std;int ...原创 2018-08-03 17:01:37 · 248 阅读 · 0 评论 -
The writing on the wall
题意:一个n*m的方格矩阵,有的格子被涂成了黑色,问该矩阵中有多少个子矩阵,子矩阵不包含黑色格子;思路:对于一个长为L, 高为H的无黑点矩阵中包含的高为H的子矩阵个数为L+(L-1)+(L-2)+...+1个;这是直接算的一种方法;如何程序表示该计算呢?for(int i=1; i<=L; i++){ for(int j=i; j>0; j--)...转载 2018-09-03 13:38:46 · 188 阅读 · 0 评论 -
hdu 1443 Joseph【约瑟夫环】
题目题意:一共有2k个人,分别为k个好人和k个坏人,现在我们需要每隔m个人把坏人挑出来,但是条件是最后一个坏人挑出来前不能有好人被挑出来。。问最小的m是多少约瑟夫环问题,通常解决这类问题时我们把编号设为从0~n-1。求出每一轮出列的人:start = (start + m - 1) % n模拟过程如下(以六个人,第五为例):1 2 3 4 5 6 易发现start1 = (0 ...原创 2018-09-17 15:03:44 · 445 阅读 · 0 评论 -
组合数
long long factorial(int n){ long long m = 1; for(int i=1;i<=n;i++) m*=i; return m;}long long C(int n,int m){ return factorial(n)/(factorial(m)*factorial(n-m)); ...原创 2018-09-18 10:58:28 · 138 阅读 · 0 评论 -
开根号
法一:用二分法一个数一个数地代入,平方,再和原数比较大小,然后继续代入,直到得到十分近似的值法二:牛顿迭代法:百度百科#include <cstdio>#include <iostream>#include <cstring>#include <cmath>using namespace std;#define eps 0....原创 2018-11-19 11:06:32 · 2387 阅读 · 0 评论 -
二分搜素——(lower_bound and upper_bound)
因为每个人二分的风格不同,所以在学习二分的时候总是被他们的风格搞晕。有的人二分风格是左闭右开也就是[L,R),有的人是左开右闭的(L,R]。二分的最基本条件是,二分的序列需要有单调性。下面介绍的时候用v来代表我们二分的目标,用第一个大于v,第一个大于等于v【升序】,最后一个小于v,最后一个小于等于v【降序】来描述,这里可以看到我即将要介绍的4种二分搜索。1.第一个大于等于v这就是我...原创 2018-07-19 11:08:07 · 427 阅读 · 0 评论 -
离散化
思路是:先排序,再删除重复元素,最后就是索引元素离散化后对应的值。假定待离散化的序列为a[n],b[n]是序列a[n]的一个副本,则对应以上三步为:sort(sub_a,sub_a+n);int size=unique(sub_a,sub_a+n)-sub_a;//size为离散化后元素个数for(i=0; i<n; i++) a[i]=lower_bound(s...原创 2018-11-24 13:21:15 · 220 阅读 · 0 评论 -
求N!的位数
#include<iostream>#include <cstdio>#include <cmath>using namespace std;const double PI =acos(-1.0);const double e = 2.71828182;int main(){ double ans,res; int n; ...原创 2018-11-30 14:02:50 · 356 阅读 · 0 评论 -
n皇后问题
#include<stdio.h>#include<iostream>using namespace std;int n,ans;int vis[10];//vis[i]:第i行有一个皇后在vis[i]列int check(int r,int c){ for(int i=1;i<=r;i++) { if(vis[i]==c...原创 2018-11-25 12:23:09 · 163 阅读 · 0 评论 -
hdu 1052 Tian Ji -- The Horse Racing【田忌赛马】
题目这道题主要是需要考虑到各种情况:先对马的速度进行排序,然后分情况考虑:1.当田忌最慢的马比国王最慢的马快则赢一局2.当田忌最快的马比国王最快的马快则赢一局3.当田忌最快的马比国王最快的马慢 则用田忌最慢的马和国王最快的马比,输一局4.当他们最快的马相等时则用 田忌最慢的马和国王最快的马比。【因为Tian剩下的super马一定能战胜king的plus马,所以就算自己输一场,队友也能帮...原创 2018-12-15 21:00:24 · 201 阅读 · 0 评论 -
hdu 1086 You can Solve a Geometry Problem too [线段相交]
题目:给出一些线段,判断有几个交点。问题:如何判断两条线段是否相交?向量叉乘(行列式计算):向量a(x1,y1),向量b(x2,y2): 首先我们要明白一个定理:向量a×向量b(×为向量叉乘),若结果小于0,表示向量b在向量a的顺时针方向;若结果大于0,表示向量b在向量a的逆时针方向;若等于0,表示向量a与向量b平行。(顺逆时针是指两向量平移至起点相连,从某个方向旋转到另一个向...原创 2018-12-17 13:23:42 · 220 阅读 · 0 评论 -
约瑟夫环
约瑟夫问题约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。 例如只有三个人,把他们叫做A、B、C,他们围成一圈,从A开始报数,假设报2的人被杀掉。首先A开始报数,他报1。侥幸逃过一劫。 然后轮到B报数,他报2。非常惨,他被杀了 C接着从1开始报数 接着轮到A报数,他报2。也被杀死了。 ...转载 2019-02-25 13:21:51 · 37858 阅读 · 7 评论 -
矩阵乘法
#include <iostream>#include <cstring>#include <cstdio>#include <cmath>using namespace std;const int Max = 100;int A[Max][Max],B[Max][Max],C[Max][Max];int main(){...原创 2019-03-13 13:09:49 · 511 阅读 · 0 评论 -
矩阵快速幂
矩阵乘法+快速幂用数组来实现:#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N=2;int tmp[N][N];void multi(int a[][N],int b[][N],int n){ memset(t...原创 2019-03-13 14:33:32 · 123 阅读 · 0 评论 -
二维map遍历
#include <iostream>#include <cstdio>#include <map>using namespace std;map<int,map<int,int> > mp;int main(){ mp[0][0]=1; mp[0][1]=2; mp[1][0]=3; for(m...原创 2019-04-10 22:32:39 · 911 阅读 · 0 评论 -
lowbit(x)
int Lowbit(int x){ return x&(-x);}lowbit当中x,-x,补码,反码,傻傻分不清楚。我们先看看两个二进制数相减的问题两个二进制数相减的相关问题两个二进制数相减的时候可以把符号括起来转化为加法,比如010-111,这时候就可以写成010+(-111),要将111转化为补码再相加,所以010+001=011即,在求 -x 的时候...原创 2018-07-27 09:59:09 · 594 阅读 · 0 评论 -
百练 2764:数根 【九余数定理】
题目这道题不能用int 来存,毕竟101000太大如果一般的来做的话如下:#include<stdio.h>int main(){ char c; int digitroot =0,sum,flag=0; while((c = getchar()) != '\n' && c != EOF) { digitr...原创 2018-04-26 15:37:30 · 279 阅读 · 0 评论 -
hdu 2049 不容易系列之考新郎 && 对错排的详解
题目错排: 当n个编号元素放在n个编号位置,错排的方法数记着D(n)⒈把第n个元素放在一个位置,比如位置k,一共有(n-1)种方法;⒉放编号为k的元素,这时有两种情况:1°把它放到位置n,那么,对于剩下的(n-1)个元素,由于第k个元素放到了位置n,剩下(n-2)个元素就有D(n-2)种方法;2°第k个元素不把它放到位置n,这时,对于这(n-1)个元素,有D(n-1)种方法...原创 2017-09-12 14:56:35 · 403 阅读 · 0 评论 -
hdu 4704 Sum 【费马小定理】
题目题意:将N拆分成1-n个数,问有多少种组成方法。例如:N=4,将N拆分成1个数,结果就是4;将N拆分成2个数,结果就是3(即:1+3,2+2,3+1)……1+3和3+1这个算两个,则这个就是组合数问题。根据隔板定理,把N分成一份的分法数为C(1,n-1), 把N分成两份的分法数为C(2,n-1),把N分成三份的分法数为C(3,n-1),.... ,把N分成N份的分法...原创 2018-08-04 11:03:56 · 228 阅读 · 1 评论 -
mod与%的区别
mod与%的区别 %与mod的区别:%出来的数有正有负,符号取决于左操作数,而mod只能是正;所以要用%来计算mod的话就要用这样的公式:a mod b = (a % b + b) % b;括号中的式子可以把左操作数转变为正数。...翻译 2018-07-26 20:55:45 · 14096 阅读 · 6 评论 -
重载
优先级队列区别于普通队列的一点是:优先级队列如果插入的节点是结构体类型,则要在结构体中重载比较操作符函数。优先队列默认的que插入是从大到小,所以在结构体中要重载<,struct P{ int pos;//position int dis;//distance friend bool operator <(P a,P b) { ...原创 2018-07-21 11:13:32 · 207 阅读 · 0 评论 -
“123”——> 123
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){ char num[110]; scanf("%s",num); int len = strlen(num); int t=1,tmp=0; ...原创 2018-07-17 13:14:53 · 611 阅读 · 0 评论 -
基本模运算
1.概念:模运算是指取模运算,即求m/n的余数。模运算有许多基本规则,熟练掌握可以更好的编程。2.交换律: (a + b) % m = (b + a) % m (a * b) % m = (b * a) % m3.结合律: [(a+b)%m+...转载 2018-07-16 19:42:23 · 1634 阅读 · 0 评论 -
java 格式化输出 printf 总结
doubled=345.678; Strings="hello!"; inti=1234; //"%"表示进行格式化输出,"%"之后的内容为格式的定义。 System.out.printf("%f",d);//"f"表示格式化输出浮点数。 System.out.printf("%9.2f",d);//"9.2"中的9表示原创 2018-03-23 14:14:50 · 2474 阅读 · 0 评论 -
逆元
什么是逆元?每个数a均有唯一的与之对应的乘法逆元x,使得ax≡1(mod n) , 一个数有逆元的充分必要条件是gcd(a,n)=1,此时逆元唯一存在 。逆元的含义:模n意义下,1个数a如果有逆元x,那么除以a相当于乘以x。逆元的定义:定义:正整数 a, n,如果有 ax ≡ 1(mod n),则称 x 的最小正整数解为 a 模 n的逆元。为什么要有乘法逆元呢?当我们要求(a/b)...原创 2017-11-18 21:25:42 · 18119 阅读 · 2 评论 -
欧拉函数
一、质因数与分解质因数 ?如果一个质数是某个数的约数,那么就说这个质数是这个数的质因数。 把一个合数用质因数相乘的形式表示出来,叫做分解质因数。 例:把30分解质因数。 解:30=2×3×5。 其中2、3、5叫做30的质因数。 又如12=2×2×3=22×3,2、3都叫做12的质因数。二、 公约数只有1的两个数,叫做互质数(欧拉函数是小于n的正整数中与n互质的数的数目)列:1到...转载 2017-11-17 17:29:02 · 277 阅读 · 0 评论 -
vim 配置半透明
转载两个博客 链接一链接二原创 2017-11-03 17:52:50 · 3011 阅读 · 0 评论 -
Math
重心 三边上中线的交点 垂心 三条高的交点 内心 内接圆圆心 三个角角平分线交点 外心 外接圆圆心 三条边的垂直平分线交点 重心是三角形三边中线的交点,重心的几条性质:(记住可以灵活运用)1、重心到顶点的距离与重心到对边中点的距离之比为2:1.2、重心和三角形3个顶点组成的3个三角形面积相等.3、重心到三角形3个顶点距离的平方和最小.4、在平面直角坐标系中,重心的坐标是顶点坐标...原创 2017-09-30 17:49:37 · 165 阅读 · 0 评论 -
二分法查找——对数
对于有序数组,使用二分法查找数据比较的次数范围 需要次数10 4100 71000 1010000 14100000 171000000 20 除了对特别小的数组外,二分法查找表现是非常优秀的.每次对范围加倍可以创建出一个数列,它是2的幂,假设s表示步数,r表示范围,则有r=2s当我们知道查找的范围r,求步数s时.就是相当于求某数指数函数的反函数即对...原创 2017-06-28 11:58:47 · 1327 阅读 · 0 评论 -
错排思想
方法一: n各有序的元素应有n!种不同的排列。如若一个排列式的所有的元素都不在原来的位置上,则称这个排列为错排。任给一个n,求出1,2,……,n的错排个数Dn共有多少个。递归关系式为:D(n)=(n-1)(D(n-1)+D(n-2))D(1)=0,D(2)=1可以得到:错排公式为 f(n) = n![1-1/1!+1/2!-1/3!+……+(-1)^n*1/n!] 其中,n!=1*2*...原创 2017-05-05 09:05:51 · 243 阅读 · 0 评论 -
输出一行数字,中间用空格隔开,最后一个数字没有空格
for(i=0;i<m;i++){printf("%d",a[i]);if(i==m-1)printf("\n");elseprintf(" ");}原创 2017-04-24 09:07:32 · 35559 阅读 · 4 评论 -
错误提示
Time Limit Exceeded一般是由于程序运行时间过长导致超过限定时间,可以通过调整算法,优化代码等措施解决Output Limit Exceeded,虽然名字上是output的问题,但绝大多数都是因为在输入的时候导致的问题,建议参考合适的输入方式OJ网站上常见错误提示 Q: 我提交了程序,OJ回复的那些评判结果是什么意思? A: 下面是常见的OJ评判结果以及它们表示的意思:...原创 2017-04-14 10:30:37 · 1147 阅读 · 1 评论 -
汉诺塔
Hanoi(n,A,B,C) : A借助B将n个盘子移动到C。第一步:A借助C将n-1个盘子移动到B; Hanoi(n-1,A,C,B);第二步:将A上剩余的一个盘移到C;A-->C第三步:B借助A将n-1个盘子移动到C;Hanoi(n-1,B,A,C);#include <iostream>#include <cstdio>using name...原创 2018-11-19 14:32:33 · 161 阅读 · 0 评论