经典题
文章平均质量分 54
Jeromiewn
不可以!
展开
-
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 · 747 阅读 · 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 · 640 阅读 · 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 · 450 阅读 · 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 · 442 阅读 · 0 评论 -
poj 3009(dfs基础题)
题目大意要求把一个冰壶从起点“2”用最少的步数移动到终点“3”,其中0为移动区域,1为石头区域,冰壶一旦想着某个方向运动就不会停止,也不会改变方向(想想冰壶在冰上滑动),除非冰壶撞到石头1或者到达终点3,冰壶撞到石头后,冰壶会停在石头前面,此时(静止状态)才允许改变冰壶的运动方向,而该块石头会破裂,石头所在的区域由1变为0. 也就是说,冰壶撞到石头后,并不会取代石头的位置。终点是一个摩擦力很大的区原创 2016-11-12 16:10:43 · 675 阅读 · 0 评论 -
hdu 1027 hdu 1716 (next_permutation的使用)
用next_permutation()函数前提有序,先排序sort一般用 do while(next_permutation(num,num+n))是保证第一个组合形式输出如1 2 5 3排序完输出1 2 3 5然后next_使用一次,输出num[i]为1 2 5 3再使用一次,num继续变总之这个函数就是使num保存每一次变化的全排列,再依次输原创 2016-11-12 18:27:17 · 441 阅读 · 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 · 390 阅读 · 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 · 462 阅读 · 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 · 324 阅读 · 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 · 482 阅读 · 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 · 397 阅读 · 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 · 3627 阅读 · 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 · 485 阅读 · 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 · 404 阅读 · 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 · 499 阅读 · 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 · 493 阅读 · 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 · 1522 阅读 · 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 · 435 阅读 · 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 · 519 阅读 · 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 · 694 阅读 · 0 评论 -
hdu 1062(字符串的处理 倒序输出)
输入带空格的字符串,gets(s)#include #include #include #include#include using namespace std;int main(){ char s[1005]; int n; cin>>n; getchar(); for(int i=0; i<n; i++) {原创 2016-11-07 00:33:05 · 481 阅读 · 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 · 564 阅读 · 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 · 647 阅读 · 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 · 1303 阅读 · 0 评论