上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 28 下一页

2012年8月11日

HDU 2094 产生冠军

摘要: 地址:http://acm.hdu.edu.cn/showproblem.php?pid=2094思路一:产生冠军的条件:(1)获胜的人没输过一次(2)最终获胜的人只有一个思路二:观察一下,可以看到其实只要总元素数-失败者==1就可以输出YES了。。思路三:左边的为胜利者,右边的为失败者,如果左边的胜利者只有一个没在右边出现过,那么这个就是产生的冠军,否则产生不了 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int main() 5 { 6 int n,i,j,k; 7 in 阅读全文

posted @ 2012-08-11 11:35 mycapple 阅读(1023) 评论(0) 推荐(0) 编辑

2012年8月10日

NYOJ 517 最小公倍数 (大数+求最小公倍数思想)

摘要: 考虑到1-100的最小公倍数肯定超出__int64.所以需要转化成字符串问题来解仔细观察会发现,【1-n】的最小公倍数,是【1-n-1】的最小公倍数乘以n的所有素因子中没有被【1-n-1】包含的素因子。例如:【1-7】的最小公倍数是2*3*2*5*7,8=2*2*2,(8中2出现3次,【1-7】的素因子中只出现2次)那么【1-8】就是2*3*2*5*7*2 1 //我的代码: 2 #include<stdio.h> 3 #include<string.h> 4 #define N 50 5 int len,a[N]={1}; 6 char tab[100][45]={0 阅读全文

posted @ 2012-08-10 19:46 mycapple 阅读(850) 评论(0) 推荐(0) 编辑

NYOJ 325 zb的生日(搜索解平分问题)

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=325题意:有n个西瓜(n<=20),每个西瓜有一定的重量(w<=10000),将它们分成两堆,问如何使两堆重量之差最小。解题思路:还是看成容量为 sum/2 的背包问题,用搜索枚举所有情况,使背包中的重量尽量大。如此可得到最优解。搜索的效率取决于剪枝。而剪枝一般有两种,可行性剪枝与最优性剪枝。可行性:如果将物品装入背包后,费用超过容量,则不将它放入背包。最优性:1、如果背包已经装满,则不再考虑其他情况。2、如果背包中已有物品加上现有可选物品的总重量都不大于已知的最优解,则剪枝。 阅读全文

posted @ 2012-08-10 18:03 mycapple 阅读(440) 评论(0) 推荐(0) 编辑

树状数组

摘要: 树状数组是一种非常优雅的数据结构. 当要频繁的对数组元素进行修改,同时又要频繁的查询数组内任一区间元素之和的时候,可以考虑使用树状数组. 最直接的算法可以在O(1)时间内完成一次修改,但是需要O(n)时间来进行一次查询.而树状数组的修改和查询均可在O(log(n))的时间内完成. 设a[1...N]为原数组,定义c[1...N]为对应的树状数组: c[i] = a[i - 2^k + 1] + a[i - 2^k + 2] + ... + a[i] 其中k为i的二进制表示末尾0的个数,所以2^k即为i的二进制表示的最后一个1的权值. 所以2^k可以表示为n&(n^(n-1))或更简单的 阅读全文

posted @ 2012-08-10 16:34 mycapple 阅读(206) 评论(0) 推荐(0) 编辑

NYOJ 322 Sort (归并排序求逆序数) (树状数组求逆序数)

摘要: 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=322如果按冒泡排序这些O(n^2)肯定会超时,所以需要找一种更快的方法 --------归并排序。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。这题还可以用树状数组来做 1 法一:用归并排序做 2 #include<stdio.h> 3 int a[1000001],b[1000001]; /*合并排序 阅读全文

posted @ 2012-08-10 16:31 mycapple 阅读(293) 评论(0) 推荐(0) 编辑

NYOJ 233 Sort it

摘要: 1 #include<stdio.h> 2 int a[1010]; 3 int main() 4 { 5 int i,j,n,t,tmp; 6 while(scanf("%d",&n)!=EOF) 7 { 8 for(i=0;i<n;i++) 9 scanf("%d",a+i);10 for(i=0,t=0;i<=n-1;i++)11 for(j=i+1;j<=n-1;j++)12 if(a[i]>a[j])13 {14 ... 阅读全文

posted @ 2012-08-10 15:44 mycapple 阅读(199) 评论(0) 推荐(0) 编辑

NYOJ 163 Phone List

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=163字典树的应用。。。如果字符串Xn=X1X2....Xn是字符串Ym=Y1Y2....Ym的前缀,有在插入的时候有两种情况:Xn在Yn之前插入,Xn在Yn之后插入。(1)如果Xn在Yn之前插入,那么在插入Yn的时候必然经过Xn的路径,此时可以根据判断在这条路径上是否已经有结点被标记已经构成完成的字符串序列来判断是否存在Yn的前缀;(2)如果Xn在Yn之后插入,那么插入完成之后当前指针指向的结点的next数组中的元素必定不全为NULL。 1 #include<cstdio> 2 阅读全文

posted @ 2012-08-10 11:35 mycapple 阅读(243) 评论(0) 推荐(0) 编辑

ZOJ 1610 Count the Colors

摘要: 经典的线段上色问题,略有不同的地方时从0开始,还有要输出每种颜色的个数 。题目:线段染色问题,求最后最上面的颜色段数思路:对每一次染色执行update操作,当颜色未完全覆盖当前段时,当前根的颜色块需要下移!然后执行一次query操作记录所有线段的颜色法一: 1 #include<stdio.h> 2 #include<string.h> 3 #define N 8001 4 int color[N],cnt[N];//这个cnt是用来记录颜色i出现的段数 ,注意cnt里的这个N真的需要好大,我以为就几百种呢,结果WA好多次 5 int main() 6 { 7 int 阅读全文

posted @ 2012-08-10 11:19 mycapple 阅读(280) 评论(0) 推荐(0) 编辑

HDU 1251 统计难题

摘要: 地址:http://acm.hdu.edu.cn/showproblem.php?pid=1251字典树的应用。。。。。 1 #include<cstdio> 2 #include<cstring> //memset函数的头文件 3 #include<iostream> 4 using namespace std; 5 struct node{ 6 int count; 7 node *next[26]; 8 node(){ //初始化数据 9 memset(next,NULL,sizeof(next));10 co... 阅读全文

posted @ 2012-08-10 10:55 mycapple 阅读(1391) 评论(0) 推荐(0) 编辑

2012年8月9日

NYOJ 125 盗梦空间

摘要: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int main() 5 { 6 int n,m,i,t ,s,w;; 7 char str[10]; 8 scanf("%d",&n); 9 while(n--)10 {11 scanf("%d",&m);12 s = 0; w = 1; i= 0;13 while(m--)14 {15 scanf("%s",&str);16 ... 阅读全文

posted @ 2012-08-09 20:54 mycapple 阅读(294) 评论(0) 推荐(0) 编辑

上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 28 下一页

导航