
数据结构
David_Yang
心态决定一切细节决定成败
展开
-
并查集
题目链接:点击打开链接#include#define MAXN 1000 + 10int fa[MAXN];int find_set(int i){ if(fa[i] == i) return i; else return (find_set(fa[i]));}void union_set(int x,int y){ int root_x = find_s原创 2014-03-22 18:10:16 · 468 阅读 · 0 评论 -
hdu 1234_sort的陷阱
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1234原创 2014-08-20 12:53:52 · 505 阅读 · 0 评论 -
hdu 1050_贪心
思路:这道题最少花多少时间,实际上我们只要考虑哪一段重合度最高,重合度最高的地方,也就是我们至少要移动的次数了。因为有400间房间,1-2对应一段走廊,3-4对应一段走廊,如此我们可以把走廊分成200段,标记为a[1]-a[200],之后我们根据输进的房间序号,就可以算出要用到哪几段的走廊,之后给对应的a[n]值加1就好,最后求出a[n]最大值就是移动的次数了。转载 2014-08-19 16:13:12 · 469 阅读 · 0 评论 -
hdu 1051_贪心
http://acm.hdu.edu.cn/showproblem.php?pid=1051原创 2014-08-19 17:09:40 · 500 阅读 · 0 评论 -
hdu 2037_贪心
http://acm.hdu.edu.cn/showproblem.php?pid=2037思路:排序结束时间原创 2014-08-19 13:19:34 · 463 阅读 · 0 评论 -
hdu 2492后缀数组
原题链接:点击打开链接原创 2014-07-31 10:00:49 · 502 阅读 · 0 评论 -
hdu 1024最大m字段和
方程 dp[i][j]=Max(dp[i][j-1]+a[j] , max( dp[i-1][k] ) + a[j] ) 0原创 2014-08-01 20:39:17 · 612 阅读 · 0 评论 -
hdu 2141
题目:click here原创 2014-08-02 01:10:27 · 525 阅读 · 0 评论 -
hdu_1039 Easier Done Than Said?(水题)
题目链接:click here ~~判断一个密码是否符合要求。原创 2014-05-25 10:58:03 · 521 阅读 · 0 评论 -
hdu 1020_Encoding(水题)
题目链接:clink here~~题目大意是原创 2014-05-25 10:02:03 · 474 阅读 · 0 评论 -
hdu 1231_最大字段及其起始、终止位置
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231原创 2014-08-20 14:39:36 · 856 阅读 · 0 评论 -
hdu 1164_将一个数分割成若干素数的乘积
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1164#includevoid show(int a){ int i = 1,n = 0; while(i <= a && a != 1) { i++; while(a % i == 0) { a /= i; n += 1; printf(n ==原创 2014-08-20 16:11:21 · 882 阅读 · 0 评论 -
hdu 1166
http://acm.hdu.edu.cn/showproblem.php?pid=1166原创 2014-08-15 15:05:35 · 497 阅读 · 0 评论 -
hdu 1085
#include using namespace std;int main(int argc, char *argv[]){ int num[3]; int cent[3]={1,2,5}; //次数增长步长 while(scanf("%d %d %d",&num[0],&num[1],&num[2]) != EOF) {原创 2014-08-12 16:24:17 · 483 阅读 · 0 评论 -
hdu 1465
#includeint main(){ int n,i; __int64 a[25]; a[2]=1;a[3]=2; for(i=4;i<=21;i++) a[i]=(i-1)*(a[i-1]+a[i-2]);//全错排公式 while(scanf("%d",&n)!=EOF) printf("%I64d\n",a[n]); return 0;}原创 2014-08-12 13:19:22 · 466 阅读 · 0 评论 -
1261 大数与常数的乘除
#include#include#include#includeusing namespace std;int num[27];vectorfacs;string Divide(const string &str,int n){ int len=str.size()-1; string s=""; int c=0,p=0; for(int i=0;i原创 2014-08-11 23:11:38 · 497 阅读 · 0 评论 -
hdu 1058_优先队列
http://acm.hdu.edu.cn/showproblem.php?pid=1058原创 2014-08-22 15:26:38 · 566 阅读 · 0 评论 -
hdu 1878_欧拉回路_并查集
http://acm.hdu.edu.cn/showproblem.php?pid=1878原创 2014-08-21 21:42:08 · 543 阅读 · 0 评论 -
hdu 1879_并查集_最小生成树_Kruskal
http://acm.hdu.edu.cn/showproblem.php?pid=1879#include #include #include #include using namespace std;typedef struct Edge { int u, v; int w; int flag;}Edge;Edge e[10005];int fa[105];int原创 2014-08-22 08:58:28 · 568 阅读 · 0 评论 -
hdu 3177_贪心
用差值排序,不能用Bi排序,原创 2014-08-20 00:25:01 · 546 阅读 · 0 评论 -
hdu 1212_大数取模
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1212原创 2014-08-20 16:52:21 · 515 阅读 · 0 评论 -
hdu_1062 Text Reverse(水题)
题目链接:click here~~题意是原创 2014-05-25 09:51:08 · 516 阅读 · 0 评论 -
产生一个集合的所有子集
/*此解法通过不停的产生下一个集合来生成一个集合的所有子集如要产生1~4的所有子集,如果当前集合是{1},下一个集合则是{1,2} ,{1,2,3},{1,2,3,4} (set[position + 1] = set[position] + 1; position++)下一个集合呢?即{1,2,4}(set[--position]++) */#include #include原创 2013-10-27 15:33:24 · 666 阅读 · 0 评论 -
HDU 1002高精度加法的栈实现_简单易懂
#include#include#include#includeusing namespace std;#includestack s1;stack s2;stack s3;char a[1005],b[1005];void calculate(){ int temp = 0; while(!s1.empty() && !s2.empty()) {原创 2014-03-23 22:42:04 · 786 阅读 · 0 评论 -
10361 - Automatic Poetry(水题)
下面的解法是最简单的但不是最精简的(可以用正则表达式最简化),像我这种有代码洁癖的人总喜欢把简单的问题复杂化啊啊啊啊啊。题目链接:点击打开链接#include#include#define N 110int main (){ int i,j,Case,lena,lenb; char a[N],b[N],s[N],s1[N],s2[N],s3[N],s4[N],s5[N];原创 2013-10-25 13:14:29 · 507 阅读 · 0 评论 -
分数拆分
输入正整数k,找到所有的正整数x>=y,使得1/k = 1/x + 1/y样例输入:2 12样例输出:21/2 = 1/6 + 1/31/2 = 1/4 + 1/4#include#includeint main(){ using namespace std; double k; double x,y; cin >> k; for(y = k +原创 2013-10-26 15:13:28 · 532 阅读 · 0 评论 -
n个数的最大公约数
#include#include#includeusing namespace std; //n个数的最大公约数/***求出n个数中最小的,如果从(n-1)递减到2中有能被其他所有数相除的,这个数就是这n个数的最大公约数** */int gcd(int *carray){ int arrayLength = sizeof(carray)/sizeof(int); sort原创 2014-03-02 00:01:54 · 1185 阅读 · 0 评论 -
蛇形填数
/*蛇形填数在n*n方阵里填入1,2...,n*n,要求填成蛇形。例如n= 4时方阵为:10 11 12 19 16 13 28 15 14 37 6 5 4n <= 8思路:“笔的移动轨迹是:下下下,左左左,上上上,右右,下下,左,上”不难得出代码:*/#include #include using原创 2014-03-04 18:19:32 · 595 阅读 · 0 评论 -
输出 1 到 n 的全排列
#include#includeusing namespace std;int a[] = {1,2,3};void solve(int n,int* a,int cur){ if(n == cur){ for(int i = 0; i < n; i++) printf("%d ",a[i]); printf("\n"); } else for(int i = 1; i <原创 2014-03-16 21:29:35 · 1913 阅读 · 0 评论 -
还是畅通工程
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233#include#includeint fa[100 + 10];struct Road{ int x; int y; int length;}road[5000];bool cmp(Road a,Road b){ if(a.length < b.l原创 2014-03-22 20:10:56 · 592 阅读 · 0 评论 -
畅通工程续_floyd实现
原题链接: 点击打开链接#include#includeusing namespace std;# define max 0xfffffffint n,m,map[201][201];void getmap(){ int i,j,a,b,l; for(i=0;i { for(j=0;j {原创 2014-03-22 22:56:50 · 544 阅读 · 0 评论 -
HDU 1007 Quoit Design_二分法求最近点对
具体推导过程见王晓东《计算机算法设计与分析》第四版29页,一大堆图,公式,我就不抄上来了。#include#include#includeusing namespace std;int n;struct node{ double x; double y;}p[100005];int a[100005];double cmpx(node a,node b){ re原创 2014-03-31 15:03:34 · 494 阅读 · 0 评论 -
hdu 1010 Tempter of the Bone_奇偶剪枝+dfs
题目链接: ~click here ~原创 2014-04-10 14:12:48 · 460 阅读 · 0 评论 -
字符串完美度
我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同,而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。现在给定一个字符串,输出它的最大可能的完美度。例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。原题链接:点击打开链接原创 2013-10-25 13:12:20 · 594 阅读 · 0 评论 -
UVA_10115 - Automatic Editing之replace的用法
先来一道UVA题目:点击打开链接这是一道水题,但许多人的解法却不精简。题意是:有n个替换规则,对于输入的str,不停的应用第一个替换规则,直到str中不能使用这个替换规则,以此类推。#include using namespace std;int main(){ int n,i; while(cin >> n && n) { cin.get()原创 2013-10-24 09:23:29 · 554 阅读 · 0 评论 -
字符串消除
一般难度的题。深入推导过程:http://blog.youkuaiyun.com/ydianh/article/details/10382313题目详情给定一个字符串,仅由a,b,c 3种小写字母组成。当出现连续两个不同的字母时,你可以用另外一个字母替换它,如有ab或ba连续出现,你把它们替换为字母c;有ac或ca连续出现时,你可以把它们替换转载 2013-10-19 09:17:57 · 545 阅读 · 0 评论 -
十进制与二进制 十六进制之间转换
一、 十进制与二进制之间的转换 (1) 十进制转换为二进制,分为整数部分和小数部分 ① 整数部分 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。下面举例: 例:将十进制的168转换为二进制 得出结果 将十进制的168转换为转载 2013-07-06 19:40:47 · 928 阅读 · 0 评论 -
约瑟夫环的推导
数学推导:(转载):无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。我们注意到原问题仅仅是要求出最后的胜利者的序号,而不是要读者模拟整个过程。因此如果要追求效率,就要打破常规,实施一点数学策略。为了讨论方便,先把问题稍微改变一下,并转载 2013-09-28 00:36:48 · 1556 阅读 · 0 评论 -
POJ 1007
DescriptionOne measure of ``unsortedness'' in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence ``DAABEC'', this m原创 2013-09-28 11:11:55 · 504 阅读 · 0 评论 -
SCAU 1142 巡逻的士兵
有N个士兵站成一队列, 现在需要选择几个士兵派去侦察。为了选择合适的士兵, 多次进行如下操作: 如果队列超过三个士兵, 那么去除掉所有站立位置为奇数的士兵, 或者是去除掉所有站立位置为偶数的士兵。直到不超过三个战士,他们将被送去侦察。现要求统计按这样的方法,总共可能有多少种不同的正好三个士兵去侦察的士兵组合方案。此题可用递归解决.当n为3时无疑只有一种情况,结果count为1;当n为原创 2013-09-28 20:05:39 · 817 阅读 · 0 评论