2013年2月27日

树状数组(HDU 1166)

摘要: http://baike.baidu.com/view/1420784.htm树状数组是一个查询和修改复杂度都为log(n)的数据结构,假设数组a[1..n],// 从1开始用lowbit函数维护了一个树的结构那么查询a[1]+...+a[n]的时间是log级别的,而且是一个在线的数据结构,支持随时修改某个元素的值,复杂度也为log级别。例:HDU 1166import java.io.*;import java.util.*;import java.math.*;import java.text.*;public classMain { int t, n, a[], c[]; String 阅读全文

posted @ 2013-02-27 19:08 Sure_Yi 阅读(184) 评论(0) 推荐(0) 编辑

2013年2月25日

组合数求解(两种方法)

摘要: 1) long C(int n, int m) { if (n - m < m) m = n - m; long ans = 1; for (int i = 1; i <= m; i++) ans = ans * (n - i + 1) / i; return ans; }2) static final int MAXN = 30; // max size void init() { int C[][] = new int[MAXN][MAXN]; C[0][0] = 1; for (int i = 1; i < MAXN; i++) { C[i][0] = C[... 阅读全文

posted @ 2013-02-25 22:42 Sure_Yi 阅读(315) 评论(1) 推荐(0) 编辑

Java nextPermutation( )

摘要: I like Java. But there is at least one thing missing in Java for sure — permutations.http://codeforces.com/blog/entry/3980 boolean nextPermutation(int[] p, int st, int ed) { for (int a = ed - 2; a >= st; a--) { if (p[a] < p[a + 1]) { for (int b = ed - 1; ; b--) { if (p[b] > p[a]) { in... 阅读全文

posted @ 2013-02-25 21:29 Sure_Yi 阅读(323) 评论(0) 推荐(0) 编辑

Java 两个数交换

摘要: 在JAVA里面没有指针的概念,传过去的只不过一个引用而已,它不会改变原有的值。把a,b定义成全局变量是能够改变的。例: int a, b; void Swap() { int temp = this.a; this.a = this.b; this.b = temp; } void run() { a = 3; b = 4; Swap(); a = 5; b = 6; Swap(); System.out.println(a + " " + b); } 结果:6 5 阅读全文

posted @ 2013-02-25 20:09 Sure_Yi 阅读(261) 评论(0) 推荐(0) 编辑

2013年2月24日

Java String 输出格式

摘要: HDU 2093:System.out.format("%-10s %2d %4d\n", p[i].name, p[i].a, p[i].b); //错误System.out.println(String.format("%-10s %2d %4d", p[i].name, p[i].a, p[i].b));// 正确http://www.cnblogs.com/webcyz/archive/2011/12/18/2291734.htmlhttp://blog.csdn.net/touch_2011/article/details/6860574例子: 阅读全文

posted @ 2013-02-24 22:19 Sure_Yi 阅读(604) 评论(0) 推荐(0) 编辑

Java 浮点数输出格式(四舍五入)

摘要: http://oracle-9i.iteye.com/blog/1103316double四舍五入得到精确结果:double a = -12.4658; double b = -12.5658; System.out.println((int) Math.floor(a)); System.out.println((int) Math.ceil(b)); System.out.println(new BigDecimal(a).setScale(0, BigDecimal.ROUND_HALF_UP)); System.out.println(new BigDecimal(b).... 阅读全文

posted @ 2013-02-24 19:28 Sure_Yi 阅读(1670) 评论(0) 推荐(0) 编辑

2013年2月22日

Java 结构体排序两种方法(Comparable, Comparator)

摘要: http://blog.csdn.net/liang5630/article/details/8221041importjava.io.*;importjava.util.*;importjava.math.*;publicclassMain{Nodea[];voidrun(){a=newNode[10];for(inti=0;i<10;i++){a[i]=newNode();a[i].x=9-i;a[i].y=i;}Arrays.sort(a);// Arrays.sort(a,newcmp());// Arrays.sort(a,0,n,newcmp());for(inti=0;i& 阅读全文

posted @ 2013-02-22 10:08 Sure_Yi 阅读(871) 评论(0) 推荐(0) 编辑

2013年2月21日

过河问题(POJ 1700)

摘要: http://www.cppblog.com/abilitytao/archive/2009/03/28/78197.html有点不明白,为什么一定要两个两个的,存在一个最快的带动,不是也可以的么,再深度理解。。。解题思路:当人数等于1,2,3的时候:答案很容易得出;当人数大于等于4时:若设过桥速度最快的那个人过桥时间为a,第二快为b;过桥第二慢的那个人过桥时间为y,最慢为z;此时有两种过桥方案:一.最快和次快的人先过,然后最快的回来,然后最慢与次慢的人再过,次快的回来;二.最快的和最慢的过,快的回来,在和次慢的过,快的再回来;第一种方法时间为b*2+a+z (+ b)第二种方法时间为y+z+ 阅读全文

posted @ 2013-02-21 22:45 Sure_Yi 阅读(219) 评论(0) 推荐(0) 编辑

皇后相斥问题(UVA 11538)

摘要: http://blog.sina.com.cn/s/blog_77dc9e080101hwtz.html解题思路:1. 计数问题, 有三种相对摆放方式: 水平, 竖直, 对角线. 根据加法原理即可, 并且没有交集.水平和竖直是一样的, 只要n*m矩形旋转90度. 所以结果是: n*m*(m-1)+n*m*(n-1);2. 对角线复杂些, 先来确定对角线的长度: 1,2,3,...,n-2,n-1,n,n,n,...,n,n,n-1,n-2,...,2,1;其中n的个数是m-n+1 (其中假设m>n);结果: 2*(2*∑i*(i-1) + (m-n+1)*n*(n-1))其中累加的范围是 阅读全文

posted @ 2013-02-21 21:53 Sure_Yi 阅读(179) 评论(0) 推荐(0) 编辑

类似冒泡排序法(ZOJ 1730)

摘要: http://blog.csdn.net/yzl_rex/article/details/7391777如果所有人是线性排列,那我们的工作就是类似冒泡程序做的工作:1,2,3,4,5变为5,4,3,2,1,耗时n(n-1)/2但是出现了环,也就是说1,2,3,4,5变为3,2,1,5,4也可满足条件我们可以把这个环等分成两个部分(四部分不行了,圆的头与尾接不上了) ,每个部分看成是线性的,再把它们花的时间加起来.当n是偶数时,每份人数n/2,即2*(n/2)*(n/2-1)/2;当n是奇数时,两份的人数分别是n/2和n/2+1,即(n/2)*(n/2-1)/2+(n/2+1)*(n/2)/2i 阅读全文

posted @ 2013-02-21 20:39 Sure_Yi 阅读(228) 评论(0) 推荐(0) 编辑

导航