- 博客(51)
- 收藏
- 关注
原创 Hdu oj 1061 Rightmost Digit
Problem Description Given a positive integer N, you should output the most right digit of N^N. Input The input contains several test cases. The first line of the input is a single integer T
2015-09-19 21:04:18 416
原创 快速幂取模算法
快速幂取模算法,即求(a^b) mod c =?.如果直接计算,代码如下:【时间复杂度为O(b)】 int ans=1; for(int i=1;i<=b;i++) { ans=ans*a; } ans=ans%c; 【一】优化一:(a^b) mod c =[(a mod c)^b] mod c; 引理一:(ab) mod c=[(a mod c)*(b mod c)] m
2015-09-13 12:17:53 448
原创 Hdu oj 2546 饭卡
Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。 某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。 In
2015-08-27 17:42:51 707
原创 背包问题2《模版》
01背包模版: memset(f,0,sizeof(f)); for(i=1;i<=n;i++) for(j=v;j>=volume[i];j--) { f[j]=max(f[j],f[j-volume[i]]+value[i]); } printf("%ld\n",f[v]);
2015-08-26 17:41:30 675
转载 背包问题
P01: 01背包问题 题目 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转
2015-08-26 16:10:49 318
原创 欧拉函数
一 欧拉函数的定义: 在数论中,对于正整数N,少于或等于N ([1,N]),且与N互质的正整数(包括1)的个数,记作φ(n)。 φ函数的值: φ(x)=x(1-1/p(1))(1-1/p(2))(1-1/p(3))(1-1/p(4))…..(1-1/p(n)) 其中p(1),p(2)…p(n)为x 的所有质因数;x是正整数; φ(1)=1(唯一和1
2015-08-24 21:40:41 1746
原创 Hdu oj 5137 How Many Maos Does the Guanxi Worth
题目:点击打开链接 分析: 枚举+floyd 代码: #include #include #include #define INF 0x3f3f3f3f using namespace std; int p[40][40],dis[40][40]; int n,m; int floyd(int x) { int i,j,k; for(i=1;i<=n;i++)
2015-08-24 11:26:57 361
原创 Hdu oj 1058 Humble Numbers
题目:点击打开链接 代码: #include #define min(a,b) ((a)<(b)?(a):(b)) #define min4(a,b,c,d) min(min(a,b),min(c,d)) int a1[5900]; int main() { int i=1; a1[1]=1; int a=1,b=1,c=1,d=1; while(i<=5842) { a1[++i]=min4
2015-08-22 23:52:06 501
原创 Hdu oj 2066 一个人的旅行
题目:点击打开链接 代码 #include #include #include #include #define INF 0x3f3f3f3f using namespace std; int d[1005][1005]; int a1[1005],b1[1005]; int main() { int m,n,p; while(~scanf("%d%d%d",&m,&
2015-08-21 20:19:50 602
原创 ZOJ 1045 HangOver
题目:点击打开链接 代码 #include int main() { double c,d; while(~scanf("%lf",&c),c)//0.5特殊数据 { d=0; int i; for(i=2;;i++) { if(d>=c)//这两个的顺序别弄反了 break; d=d+1.0/i;// }
2015-08-21 16:53:04 322
原创 Hdu oj 1048 The Hardest Problem Ever
题目:点击打开链接 代码: #include #include char str2[1010]; int main() { while(gets(str2))// !!! { if(strcmp(str2,"START")==0||strcmp(str2,"END")==0) continue; if(s
2015-08-21 10:46:11 302
原创 Hdu Oj 2112 HDU Today
题目:点击打开链接 代码: #include #include #include #include #include #include #define INF 0x3f3f3f3f using namespace std; struct Edge { int from,to,value,next; }edge[20005]; int head[155],num; i
2015-08-20 10:45:08 366
原创 Hdu oj 2066 一个人的旅行
题目:点击打开链接 代码: #include #include #include #include #include #define INF 0x3f3f3f3f using namespace std; struct Edge { int from,to,value,next; }edge[2010]; int head[2010],num; int d[1010]
2015-08-19 20:34:15 341
原创 Hdu Oj 2680 Choose the best route
题目:点击打开链接 代码: #include #include #define INF 0x3f3f3f3f using namespace std; int cost[1010][1010],d[1010]; bool used[1010]; int a,b,c; void distr(int x) { for(int i=1;i<=a;i++) { d[i]=
2015-08-19 10:01:01 540
原创 Hdu oj 1596 find the safest road
题目:点击打开链接 分析:审清题,注意格式。 代码 #include #include #include using namespace std; double cost[1010][1010],d[1010]; bool used[1010]; int t; void distr(int x,int y) { for(int i=1;i<=t;i++) {
2015-08-18 21:26:18 375
原创 Hdu oj 2112 HDU Today
题目:点击打开链接 关于C++中map的使用:点击打开链接 代码: #include #include #include #include//将字符串转化成数字 #include #define INF 0x3f3f3f3f using namespace std; char str1[30],str2[30]; int cost[150][150],d[150]; bo
2015-08-18 16:31:55 581 2
原创 Hdu oj 2066 一个人的旅行
题目:点击打开链接 代码: #include #include #define INF 0x3f3f3f3f using namespace std; int a1[1010]; int b1[1010]; int cost[1010][1010],d[1010]; bool used[1010]; int m,n,p; void distr(int x) { for(
2015-08-18 11:15:27 682
原创 Hdu oj 1869 六度分离
题目:点击打开链接 代码: #include #include #define INF 0x3f3f3f3f using namespace std; int m,n; int cost[110][110],d[110]; bool used[110]; void distr(int x) { for(int i=0;i<m;i++) { d[i]=INF;
2015-08-18 10:19:58 673
原创 Hdu oj 1874 畅通工程续
题目:点击打开链接 #include #include #define INF 0x3f3f3f3f using namespace std; bool used[210]; int cost[210][210],d[210]; int m,n; int o,p; void dijkstra(int x) { for(int i=0;i<m;i++) { d[
2015-08-17 20:47:55 499
原创 Hdu oj 2544 最短路
题目:点击打开链接 代码一:Dijkstra算法模版 void dijkstra(int s) { for(int i=1;i<=N;i++) { d[i]=INF; used[i]=false; } d[s]=0; while(true) { int v=-1; for(
2015-08-17 17:32:05 474
原创 Hdu oj 1032 The 3n + 1 problem
题目:点击打开链接 分析:注意细节。 #include int a1[1000010]; int calcue(int x) { int len=1; while(x!=1) { if(x%2==0) { x=x/2; len+=1; } if(x==1) return len
2015-08-17 16:26:36 509
原创 Hdu oj 1029 Ignatius and the Princess IV
题目:点击打开链接 代码一: #include #include int b1[1000000]; int main() { int n; while(~scanf("%d",&n)) { int i; int a,t; memset(b1,0,sizeof(b1)); for(i=0;i<n;i++) { scanf("%d",&a)
2015-08-15 12:15:25 491
原创 Hdu oj 1285 确定比赛名次
题目:点击打开链接 分析:简单拓扑排序,数据少的情况下可以用二维数组,数据比较多的时候用邻接表或优先队列。代码一:二维数组 代码二:邻接表 代码三:如何构建邻接表代码四:优先队列。 代码一: #include #include int queue[510],indegree[510]; int map[510][510]; int n,m; void tuopo() { in
2015-08-14 21:14:11 557
原创 Hdu oj 1021 Fibonacci Again
题目:点击打开链接 分析:找规律。 #include int main() { int n; while(~scanf("%d",&n)) { if(n%4==2) printf("yes\n"); else printf("no\n"); } return 0; }
2015-08-13 16:20:35 338
原创 Hdu oj 1019 Least Common Multiple
题目:点击打开链接 #include long long a1[100]; long gcd(long long a,long long b)//注意不要丢失精度 { int c; while(b%a&&a!=0) { if(a>b) { c=b; b=a; a=c; } b=b%a; } return a; } long
2015-08-13 11:56:59 391
原创 Hdu oj 1017 A Mathematical Curiosity
题目:点击打开链接 #include int main() { int t; scanf("%d",&t); while(t--) { int a=0; int m,n; while(scanf("%d%d",&n,&m)) { if(m==0&&n==0) break; a++; int i,j,k,z=0;
2015-08-13 10:33:53 521
原创 Hdu oj 1875 畅通工程再续
题目:点击打开链接 分析:代码一为AC的代码,代码二为自己在代码一的基础上优化的代码,测试多种结果都正确,但是确不能AC,后来发现,优化之后,出现了问题。 代码一: #include #include #include #include using namespace std; struct stu { int x,y; double d; }a1[10000]; s
2015-08-12 20:23:39 415
原创 Hdoj 1014 Uniform Generator
题目:点击打开链接 分析:题目要求均匀产生随机数,有两种方法:1 对产生的数进行标记 2 要产生随机数STEP和MOD的最大公约数不能超过1 代码一: #include #include int a1[100010]; int main() { int STEP,MOD; while(~scanf("%d%d",&STEP,&MOD)) { int i; in
2015-08-12 10:42:50 520
原创 Hdu oj 1013 Digital Roots
题目:点击打开链接 分析:用数组模拟大数。 九余数定理:一个数模9等于各位数字和模9,例如 33%9=6%9; 代码一: #include char str[2000]; int main() { int a; while(scanf("%s",str)) { int i; int a=0,b=0; if(str[0]=='0'
2015-08-11 21:02:41 414
原创 Hdu oj 1513 Palindrome
题目:点击打开链接 分析:LCS+滚动数组 字符串长度—LCS==需要增加的字符个数 滚动数组:优化空间,压缩存储,主要用于递推或动态规划中。 #include #include #define max(a,b) (a>b?a:b) char str1[5010],str2[5010]; int dp[2][5015];//!!!动态数组 int main() { int
2015-08-11 17:51:21 434
原创 Hdu oj 1863 畅通工程
题目:点击打开链接 #include #include using namespace std; int n,m; int per[105]; struct stu { int u,v,w; }edge[105]; void init() { int i; for(i=1;i<=m;i++) per[i]=i; } int find(int x) {
2015-08-11 15:28:29 503
原创 Hdu oj 1233 还是畅通工程
分析:Kruskal算法思想:按照边的权值的顺序从小到大查看一遍,如果不产生环(重边也算在内),就把当前这条边加入到生成树中。 #include #include using namespace std; int per[110]; int n; struct stu { int u,v,w; }edge[10000]; int cmp(stu x,stu y) { r
2015-08-11 11:07:55 694
原创 Hdu oj 1012 u Calculate e
分析:注意格式。 #include int main() { int i,j,k; double sum=0; printf("n e\n- -----------\n"); printf("0 1\n1 2\n2 2.5\n"); for(i=3;i<=9;i++) { k=1; for(j=1;j<=i;j++) k*=j; sum+=1.
2015-08-10 20:26:21 485
原创 Hdu oj1008 Elevator
#include #define N 100 int aa[N]; int main() { int a,b,i; while(scanf("%d",&a)&&a){ b=0; for(i=0;i<a;i++) scanf("%d",&aa[i]); b+=5+6*aa[0]; f
2015-08-10 19:00:14 528
原创 Hdu oj 1005 Number Sequence
分析:打表找出循环规律,另外当a=7,b=7时,无论fun[1]=1或者fun[1]=0,都能过,比较无语。#include int fun[10010]; int main() { int a,b; long c; while(~scanf("%d%d%ld",&a,&b,&c)) { int i; int cent=0; if(a==0&&b==0&&c
2015-08-10 16:31:59 429
原创 Hdu oj 1004 Let the Balloon Rise
分析:用二维数组存放字符串,另外在比较count[i]的大小时,注意保留数组的下标。 #include #include char str[1010][16]; int count[1010]; int main() { int m; while(scanf("%d",&m),m) { int i,j; int max,k; for(i=0;i<m
2015-08-08 17:35:46 369
原创 Hdu oj 1002 A + B Problem II
分析:用字符串模拟数的加法。 #include #include #define N 1000 char str1[N],str2[N]; int ans1[N+10],ans2[N+10]; int main() { int t; int k; scanf("%d",&t); k=0; while(t--) { int i,j; int
2015-08-08 15:31:42 506
原创 Poj 2752 Seek the Name, Seek the Fame
分析:理解p[ ]的意义。 #include #include char str[400010]; int len; int p[400010]; int a[400010]; void getp() { int i=0,j=-1; p[i]=j; while(i<len) { if(j==-1||str[i]==str[j]) { i++,j+
2015-08-07 20:27:40 376
原创 Poj 2406 Power Strings
学算法之后,Ac的第一道题。 分析:当i%(i-p[i])==0&&p[i]!=0时,字符串结束循环。并且,偱环节长度为 i-p[i],循环次数为 i/(i-p[i]). #include #include int len; int p[1000010]; char str[1000010]; void getp() { int i=0,j=-1; p[i]=j; w
2015-08-07 16:34:04 408
原创 Hdu oj 1686 Oulipo
#include #include #define N 10010 char str1[N],str2[N*100]; int cent,i,j; int len1,len2; int p[N]; void getp() { i=0,j=-1; p[i]=j; while(i<len1) { if(j==-1||str1[i]==str1[j])
2015-08-07 12:07:03 594
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人