摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2363题意:给你n点,m条路,每个点都有不同的高度,题目要求在高度差最小的情况下的最短路径。开始做这个题目时,我是用二次最短路在做的,回来发现思路错了,就参考了大牛代码,恍然大悟。只要对高度升序排序,然后枚举各个高度差下的最短路径代码:#include<iostream>#include<algorithm>using namespace std;#define p 1500000001int a[105],b[105],s[105][105],n;int main(){ int dj 阅读全文
摘要:
给你十亿个浮点型数据,需要你设计一个高效的算法找出前一万个大的数,依次输出。思路:可以开一个s[10000][100005]的二维数组,将十亿个数据读进去,再分别对每行数据用c++的sort()函数进行降序排序,再开一个t[10000]的数组用来标记s数组的每一行已经是前一万个大的数的下标.............说的不是很清楚,明天将代码附上。 阅读全文
摘要:
假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法上讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有? 比如,如果是下面两个字符串: String 1: ABCDEFGHLMNOPQRS String 2: DCGSRQPOM 答案是true,所有在string2里的字母string1也都有。如果是下面两个字符串: String 1: ABCDEFGHLMNOPQRS String 2: DCGSRQPOZ 答案是false,因为第二个字符串里的Z字母不在第一个字符串里。一看到这题,我首先排除直接拿string2里的... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1042#include<stdio.h>#include<math.h>int main(){ long m,i,j,a[10000],w,n,c; while(scanf("%ld",&n)>0) { a[0]=1; m=0; for(i=1;i<=n;i++) { c=0; for(j=0;j<=m;j++) { a[j]=a[j]*i+c; //关键语句 c=a[j]/10000; a[j]%=10000; } if(c>0) 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1316#include<stdio.h>#include<string.h>long s[10000][200]={0};char t[10000][200];int main(){ char a[200],b[200]; long i,j,n,m,count,k; s[1][0]=1; s[2][0]=2; k=0; for(i=3;i<10000;i++) for(j=0;j<200;j++) { k+=s[i-1][j]+s[i-2][j]; s[i][j]=k%10 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1753#include<stdio.h>#include<string.h>char s[402],t[402],c[402];int a[402];int main(){ int i,j,k,d,b,n,m,f,w1,w2; while(scanf("%s %s",s,t)>0) { n=strlen(s); m=strlen(t); w1=w2=0; for(i=0;i<n;i++) if(s[i]!='.') if(s[i]!= 阅读全文
摘要:
#include<iostream>2#include<string.h>3usingnamespacestd;45voidmultiply(constchar*a,constchar*b);67intmain()8{9//cout<<"hicjiajia"<<endl;1011stringnum1,num2;//初始状态用string来存储大数12cout<<"现在,来两个大数吧!"<<endl;13cin>>num1>>num2;1415constchar 阅读全文
摘要:
(a * b) % c = ((a % c) * (b % c)) % c(a + b) % c = ((a % c) + (b % c)) % c10000位大的数字可以分开算:比如:m=123123 = (1*10 + 2)*10 + 3m%n = 123%n = (((1%n * 10%n + 2%n)%n * 10%n) % n + 3%n)%n#include<stdio.h>#include<string.h>int main(){char s[1000];long a[1000],i,t,m,n,r;while(scanf("%s%ld" 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2086可由已经给出的函数,推导出n=3;4A1=3A0+A4-6C1-4C2-2C3n=2;3A1=2A0+A3-4C1-2C2n=1;2A1=A0+A2-2C1数学归纳证明:再假设n=5时;5A1=4A0+A5-8C1-6C2-4C3-2C4;再用n=5的情况减去n=4的情况,会得出A1=A0+A5-A4-2C1-2C2-2C3-2C4;再根据已有关系,带入数据,假设A0=30,A1=10,C1=10,C2=20,C3=10,C4=20,C5=10;可以算出A1=10;则上述成立#include<io 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1098有一个函数: f(x)=5*x^13+13*x^5+k*a*x给定一个非负的 k 值 求最小的非负的 a 值 使得对任意的整数x都能使f(x) 被 65 整除。每输入一个k 值 , 对应输出一个 a值 , 若不存在a值 则输出 no 数学归纳法证明:1.假设当x=n时,f(n)=........%65==0成立则只需要证明f(n+1)=5(n+1)^13+13(x+1)^5+k*a*(x+1)%65==0成立即可将f(x+1)用二项式分解,会发现5(n+1)^13+13(x+1)^5一定能被%65==0 阅读全文