
模板题
文章平均质量分 53
Jeromiewn
不可以!
展开
-
hdu 3037 费马小定理+逆元求组合数+Lucas定理
组合数学推推推最后,推得要求C(n+m,m)%p其中n,m小于10^9,p小于1^5用Lucas定理求(Lucas定理求nm较大时的组合数)因为p数据较小可以直接阶乘打表求逆元求逆元时,由费马小定理知道p为素数时,a^p-1=1modp可以写成a*a^p-2=1modp所以a的逆元就是a^p-2,可以求组合数C(n,m)%p中除法取模,将其转化为乘法取模即 /(m原创 2017-02-01 20:49:56 · 1054 阅读 · 0 评论 -
高精度大整数模板(n!为例)
如求n!1.打表(就是个想法,显然会超内存,数据范围1000可以)#include #include using namespace std;const int N=100000;const int M=10001;int a[M][7200];void fun(){ a[1][1]=1; a[2][1]=2; for(int i=3;i<M;i++)原创 2016-10-30 20:28:03 · 660 阅读 · 0 评论 -
java 大数类 总结 整数小数(BigInteger和BigDecimal)
java大法好,退c保平安看完java的大数类,决定重新做一下之前大数的题然后再整理一下吧= =整数部分(BigInterger)hdu 1001 求从1加到n,n可以很大//package BigInteger1;import java.io.*;import java.math.BigInteger;import java.util.*;public cla原创 2016-11-10 21:17:15 · 3673 阅读 · 2 评论 -
hdu 2544 (最短路 Dijkstra模板题)
#include#include#includeusing namespace std;#define INF 0x3f3f3f3;int mapn[110][110],dis[110],vis[110];void Dijkstra(int n){ int p,minn; for(int i=1;i<=n;i++) { dis[i]=mapn[1][i原创 2016-10-20 00:30:16 · 509 阅读 · 0 评论 -
hdu 1042 n!(大整数阶乘模板)
大整数乘法求阶乘初学时,用迭代法或递归法就可以计算出n阶乘,但n稍大时,int或者longlong都满足不了,要用到大整数思想如hdu1042用数组储存结果的方法#include using namespace std;int s[100005];int main(){ int n,k,ans,a; while(cin>>n) {原创 2016-09-03 19:41:58 · 683 阅读 · 0 评论 -
hdu 1869 六度分离(Floyd)
题意:数据是否能满足任何两个人都可以通过最多六个人认识即求每个人与其他人的联系是否都小于等于7用Floyd 无向图 初始有联系的标记1mp[i][j]加点k,使数组内最后剩下的是第i人与其他人之间的路径长度,即可以通过几个人认识如第一组数据的mp为0 1 2 3 4 5 6 71 0 1 2 3 4 5 62 1 0 1 2 3 4 53 2 1 0 1 2 3原创 2016-10-19 01:26:01 · 366 阅读 · 0 评论 -
poj 1125 Stockbroker Grapevine(Floyd模板题)
卡题意。。输入一个n,代表n个人,接下来n行,每行第一个,代表第i个人可以将信息传给的人数k,接下来输入k组,每组含被传给的人的序号,和第i人传给他的时间求从哪个人传播,到达最后一个人,用的时间最少,并输出最少时间即求多源起点的最短路,嗯,求每个人传递下去的最大值的,最小值。加上第k个人(k从1到n),更新一下距离#include #include using原创 2016-10-19 00:14:36 · 587 阅读 · 0 评论 -
hdu 5120 Intersection(求相交圆的面积)
画画图发现,两个相同的环重合部分的面积就是A大圆和B大圆相交的面积,减去A大圆和B小圆,减去A小圆和B大圆的面积,再加上两个小圆相交的面积,直接套,两圆相交的面积模板S = A大B大 - A大B小 - A小B大 + A小B小。#include #include #include #include using namespace std; double S1,S2,S3,a原创 2016-10-17 19:28:48 · 708 阅读 · 0 评论 -
hdu 1798 Tell me the area(相交圆的面积)
相交圆的面积模板纯数学知识,S1,S2是两个扇形的面积,S3是矩形的面积,a1,a2是两个角,用来求扇形面积q是周长的一半,用来求矩形面积#include #include #include #include using namespace std;struct circle{ double x,y,r;};int main(){ circle原创 2016-10-17 18:58:02 · 763 阅读 · 0 评论 -
hdu 1041 Computer Transformation(递推+大整数模板*)
多列几个,找到递推公式1,02,13,14,35,56,117,21找了规律可以得到递推公式f(n)=f(n-1)+2*f(n-2)很像斐波那契但由于n的范围是1000所以每次结果都储存一下所以目测结果需要用大数来做,用数组储存大数,一个储存四位的模板:#include#include#include using namespace原创 2016-10-30 19:25:01 · 470 阅读 · 0 评论 -
hdu 1250 (大整数模板+打表)
大整数,二维数组打表同hdu 1041题类似,直接改了模板直接求会超内存#include#include#include using namespace std;const int mod=100000;int a[7500][410];void fun()//打表{ a[1][1]=1; a[2][1]=1; a[3][1]=1; a[4原创 2016-10-30 21:31:50 · 470 阅读 · 0 评论 -
hdu 1241(dfs基础题)
nm的图有多少连通块把每个@遍历一遍,bfs八个方向搜一下,搜过的标记为*#include #include using namespace std;char a[105][105];int n,m;int ans;void init(){ ans=0; for(int i=0;i<n;i++) { for(int j=0;j<m;j+原创 2016-11-12 20:10:05 · 410 阅读 · 0 评论 -
hdu 5698 求组合数(逆元+阶乘 递推公式
分析向格子里填数发现,是左斜的杨辉三角,发现规律,其实就是求C(n+m-4,m-2)的组合数求组合数用逆元+阶乘(递推)#include #include #define ll long longconst int N=200005;//1e5越界const ll M=1e9+7;using namespace std;ll fac[N]={1,1},inv原创 2017-01-31 14:38:17 · 1342 阅读 · 0 评论 -
hdu 4704 sum 大整数取模+费马小定理+数快速幂
求输入的n可以有几种拆分情况:如:2-->(2,11)2种3-->(3,21,12,111)4种4-->(4,31,13,22,211,112,121,1111)8种发现规律 结果 = 2^(n-1),再取模得到要求的即为 2^(n-1)%mod由于所给的n很大,10^100000,(10^3=1000......)所以用字符串读入,先用费马小定理2^n % p =原创 2017-01-28 15:15:38 · 771 阅读 · 0 评论 -
hdu 5976 Detachment 逆元+二分+数学
给定一个数,让你分成互不相等的n个数(n为自然数),使这些数的乘积最大,输出最大乘积。因为分的数不能相同,所以发现分的数越小越好,从2开始枚举分成2,3,4,5......x=2+3+4+....+n+s(会剩下一个s)枚举s三种情况1.s==02.s==n3.s需要预处理,add2到n个相加mul2到n个相乘处理某些值的时候要用逆元,求逆元不能超时。。原创 2017-01-24 00:01:23 · 419 阅读 · 0 评论 -
hdu I Count Two Three(二分查找&&打表)
#include #include #include #include #include using namespace std;typedef long long LL;const int N=1e9;int num;mapmp;LL a[5200];void init(){ LL i,j,k,l; num=0; for(i=0; i<31;原创 2016-09-17 21:35:01 · 482 阅读 · 0 评论 -
hdu A/B 扩展gcd
转化为ax+by=c的形式,其中b=9973#include using namespace std;int x,y;int exgcd(int a,int b){ if(b==0) { x=1; y=0; return a; } int r=exgcd(b,a%b); int t=x;原创 2017-01-23 20:24:56 · 504 阅读 · 0 评论 -
poj 1061 青蛙的约会 扩展gcd
青蛙相遇可列方程(x+mt)%L=(y+nt)%L,即(m-n)*t+k*L=y-x可转化为ax+by=c先求出ax+by=gcd,再将解得的x*(c/gcd)求出最小整数解即可:用x=(x*b+b)%b....(这里的b为b/gcd#include #define LL long longusing namespace std;LL exgcd(LL a,原创 2017-01-23 20:06:55 · 348 阅读 · 0 评论 -
hdu 2669 Romantic 扩展欧几里得求线性方程模板题
a,b互质,所以gcd=1即求ax+by=1,用扩展gcd直接求#include #include #define LL long longusing namespace std;LL x,y;LL exgcd(int a,int b){ if(b==0) { x=1; y=0; return a; }原创 2017-01-23 19:45:28 · 442 阅读 · 0 评论 -
hdu 1016(dfs基础)
题意:输入一个数n,把1到n的自然数放到一个环里,保证相邻的两个数的和是素数。(1和n思路:素数打表+深搜#include #include #include #include using namespace std;int a[25],b[45]= {0},n;int isprime[40]= {0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,原创 2016-11-12 20:15:40 · 486 阅读 · 0 评论 -
hdu1171(01背包变形)
01背包变形 想法变成01背包问题 总数/2并保证a组多 应求b组最大能放的即变成对于b来说的01背包了,总价值为s=sum/2,状态方程为dp[j]=Max(dp[j],dp[j-va[i]]+va[i]);b组为dp[s],则a组为sum-dp[s];#include #include using namespace std;int Max(int x,in原创 2016-08-31 17:41:51 · 718 阅读 · 0 评论 -
hdu1203(01背包变形)
01背包变形题目有要求至少收到一份offer的最大概率,只要求得不到的最小概率即可,状态方程dp[j]=Min(dp[j],dp[j-va[i]]*pro[i])//pro[i]表示得不到的概率,dp[n]表示得不到的最小概率,结果用1减去即可再就是注意保留小数输出和%%输出%#include#include #include using namespace std;int原创 2016-08-31 17:29:35 · 541 阅读 · 0 评论 -
hdu1002
大整数加法模板题#include #include #include using namespace std;char a[1005],b[1005];int c[1005]={0};int main(){ int n,t=0; cin>>n; while(n--) { int p=0; memset(a,0,si原创 2016-09-03 19:06:08 · 322 阅读 · 0 评论 -
hdu1873
主要学习优先队列的使用#include #include //头文件#include //down 优先队列using namespace std;struct node//结构体的声明方式{ int pri; int num;//每个 进队人都给他一个(递增的)编号 friend bool operator <(node n1,node n2)//重载:原创 2016-09-03 18:47:23 · 643 阅读 · 0 评论 -
最小生成树&最短路模板
最小生成树是从一个节点到另一个节点的最小边集;最短路是带权路径,计算权值最小。最小生成树要经过每一个点,而最短路只需达到某两点的路径权值最小两个模板区别(开始都保存了1到其他点的距离在dis里,然后更新dis)dijkstra是每次找最小的dis[p],再用dis[p]+mapn[p][j]prime是每次找到最小的dis[p],加进minn里,再用mapn[pos][原创 2016-09-03 18:45:17 · 475 阅读 · 0 评论 -
hdu2544
最短路模板题#include#include#includeusing namespace std;#define INF 0x3f3f3f3;int mapn[110][110],dis[110],vis[110];void Dijkstra(int n){ int p,minn; for(int i=1;i<=n;i++) { dis[i]=m原创 2016-09-03 18:30:41 · 394 阅读 · 0 评论 -
hdu2553
先是之前的八皇后问题回溯法输出八皇后的每一种情况,共92种#include #include #include using namespace std;int mp[1005],ans,coutt[1005][1005];void is(int x){ if(x==8) { ans++; memset(原创 2016-09-03 16:58:40 · 438 阅读 · 0 评论 -
hdu1757 - A Simple Math Problem
大牛牛们说,这是矩阵快速幂,入门的题,也是很模板的一道题吧我先慢慢理理,1.先是快速幂取模(百度文库有一篇超详细的推导 求得是a^b mod c(是关于数的)int pow(int a, int b, int c){ int ans = 1; a = a % c; while(b>0) { if(b&1)//判断b是否原创 2016-09-07 18:54:16 · 786 阅读 · 0 评论 -
hdu1233 - 还是通畅工程(最小生成树)
最小生成树模板题prim算法#include #include #define inf 999999999using namespace std;int mapn[105][105],visit[105],dis[105];int t,n,m,w,pos,minn;int prim(){ visit[1]=1; int sum=0; for(int i原创 2016-09-03 18:36:32 · 393 阅读 · 0 评论 -
poj2524
裸并查集直接改的模板#include #include #include using namespace std;int n,m,f,t,s[50005],rank[50005];int find(int x){ if(s[x]!=x) return s[x]=find(s[x]); return x;}void un(int a,int b原创 2016-09-09 20:15:14 · 432 阅读 · 0 评论 -
hdu1575 - Tr A
输入一个矩阵,求他的k次幂,最后得到的矩阵对角线上相加即可由于数据很大,要用矩阵的快速幂知道了矩阵的快速幂,直接套用模板就可以不知道的话,看我hdu1757有简单介绍#include using namespace std;int n,k,mod=9973;struct matrix{ int m[15][15];};matrix x,y;matr原创 2016-09-07 20:42:28 · 375 阅读 · 0 评论 -
hdu 约瑟夫问题
1.n个人想玩残酷的死亡游戏,游戏规则如下: n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。请输出最后一个人的编号。#include int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int s=0;原创 2016-10-10 20:33:55 · 1568 阅读 · 0 评论 -
hdu 2036 (多边形面积)
用求多边形公式,模板前提,给的点按顺序连#include #include using namespace std;double S(int x[],int y[],int n){ int i,j; double s=0; for(i=0;i<n;i++){ j=(i+1)%n; s+=x[i]*y[j];原创 2016-09-21 21:28:58 · 382 阅读 · 0 评论 -
hdu2546(01背包变形)
01背包变形根据情况变形,由题意知,首先拿出5元买最贵的东西,那接下来就是背包容量m-5,物品数量n-1 的01背包问题了状态方程 dp[j]=max(dp[j],dp[j-vo[i]+vo[i])#include#include #include using namespace std;int vo[1005];int dp[1005];int main(){原创 2016-08-31 17:21:14 · 457 阅读 · 0 评论 -
hdu2639(01背包变形-第k大背包)
01背包变形 求第k大背包多开一维[k],两种情况分别放在A[],B[]两个数组里,将AB合并(即从小到大排序 取第k大)开一个大小为K的数组f[i][v][1..K]。其中f[i][v][k]表示前i个物品、背包大小为 v时,第k优解的值。可以理解成,由f[i-1][v]和f[i-1][v-c[i]]+w[i]这两个有序队列合并得到的。再加入一维k,有序队列f[i-1][v]即f原创 2016-08-31 17:01:36 · 1549 阅读 · 0 评论 -
hdu2602(01背包模板题)
01背包模板题有N件物品和一个容量为V的背包, 每种物品均只有一件。第i件物品的费用是vo[i],价值是va[i]。求解将哪些物品装入背包可使价值总和最大。状态方程是dp[i][j]=Max(dp[i-1][j],dp[i-1][j-vo[i]]+va[i]);空间优化后dp[j]=Max(dp[j],dp[j-vo[i]]+va[i])#include#includ原创 2016-08-31 16:51:50 · 525 阅读 · 0 评论 -
hdu 1286 找新朋友(欧拉函数在线模板)
纯模板#include using namespace std;int Euler(int n){ int ans=1; for(int i=2;i*i<=n;i++) { if(n%i==0) { n/=i; ans*=(i-1); while(n%i==0原创 2016-10-24 23:20:28 · 517 阅读 · 0 评论 -
hdu 2824 The Euler function (欧拉函数离线模板)
欧拉函数离线处理模板根据欧拉公式递推公式写函数:令a是n的最小质因数,if(n%a==0&&(n/a)%a==0)euler(n)=euler(n/a)*a;if(n%a==0&&(n/a)%a!=0) euler(n)=euler(n/a)*(a-1)纯模板,统计和sum,暴力打表int phi[N];int prime[N],isprime[N];vo原创 2016-10-24 22:55:36 · 429 阅读 · 0 评论 -
hdu 1787 GCD Again (欧拉函数在线模板)
欧拉函数定义:小于或等于n的数中,与n互质的数的数目如,euler(16)=81 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16,其中与n互质(与n的最大公因数是1的)的有1 3 5 7 9 11 13 15共8个,其中n本身显然不是本题,显然是求n中剩下的数目,在减去1。即n-euler(n)-1在线求就好,不存在数组里。根据欧拉函数原创 2016-10-24 22:15:47 · 774 阅读 · 0 评论 -
hdu 2066 一个人的旅行 (多源最短路 Floyd)
我居然看都没看就做成Floyd 求多源最短路了,但很容易超时,要注意一下细节,毕竟o(n^3)做完看了巨巨是我题解,把草儿家看成0,草儿到邻近的城市花费的时间看成0,这样就变成了从0到各个点的单源最短路问题,这样o(n^2)就可以过了要学习大佬们的思维方式,嗯!Floyd:#include #include #include #include using namespa原创 2016-10-23 15:32:22 · 597 阅读 · 0 评论