您的位置:首页 > 编程语言 > Java开发

POJ 2081 JAVA

2015-11-12 18:19 615 查看
http://poj.org/problem?id=2081

一个序列问题,为了时间效率,最好的方法是先计算出整个序列,这种时间复杂度其实只有O(1),然而如果对于每个输入分别计算,其实根本算法上并没有差别。

布尔数组开个400W就够了,因为最大值是3012500,表示结果的数组其实没必要开这么大。

话说用平衡树会快一点吗?

JAVA 代码如下

import java.util.Scanner;

public class Recaman_Sequence2 {
static boolean b[];
static int a[];
static int k,res;

// static int max=0;
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
b=new boolean[5000000];//max:3012500
a=new int[5000000];
a[0]=0;
R(0);
while(-1!=(k=Integer.parseInt(sc.nextLine()))){
System.out.println(a[k]);
}
}
private static void R(int start) {
for(int i=1;i<=500000;i++){
if(a[i-1]-i>0&&!b[a[i-1]-i]){
b[a[i-1]-i]=true;
a[i]=a[i-1]-i;
}else{
b[a[i-1]+i]=true;
a[i]=a[i-1]+i;
}

// max=a[i]>max?a[i]:max;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JAVA POJ 2081