POJ 2081 JAVA

来源:互联网 发布:阿里云客服工作台 编辑:程序博客网 时间:2024/05/21 19:49

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;
}
}
}

0 0