想不出好算法。。只能以空间换时间了,用了两个500000大的数组,惭愧啊。。竟然AC了
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main
{
public static void main(String[] args)
{
Set<Integer> set = new HashSet<Integer>((int) (500000 / 0.75));
int[] results = new int[500001];
set.add(0);
results[0] = 0;
for (int k = 1; k <= 500000; k++)
{
int r = results[k - 1] - k;
if (r < 0 || set.contains(r))
r = results[k - 1] + k;
results[k] = r;
set.add(r);
}
Scanner sc = new Scanner(System.in);
while (true)
{
int n = sc.nextInt();
if (n == -1)
break;
System.out.println(results[n]);
}
}
}