Recaman‘s Sequence
Time Limit: 3000MS | Memory Limit: 60000K | |
Total Submissions: 22566 | Accepted: 9697 |
Description
The Recaman‘s sequence is defined by a0 = 0 ; for m > 0, am = am−1 − m if the rsulting am is positive and not already in the sequence, otherwise am = am−1 + m.
The first few numbers in the Recaman‘s Sequence is 0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9 ...
Given k, your task is to calculate ak.
Input
The input consists of several test cases. Each line of the input contains an integer k where 0 <= k <= 500000.
The last line contains an integer −1, which should not be processed.
Output
For each k given in the input, print one line containing ak to the output.
Sample Input
7 10000 -1
Sample Output
20 18658
Java AC 代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = 0; int[] result; boolean[] marked = new boolean[10000000]; while((n = sc.nextInt()) != -1) { result = new int[n + 1]; for(int i = 1; i < n + 1; i++) { int a = result[i - 1] - i; if(a > 0 && !marked[a]) { result[i] = a; marked[a] = true; } else { result[i] = a + 2 * i; marked[a + 2 * i] = true; } } System.out.println(result[n]); for(int i = 0; i < 10000000; i++ ) marked[i] = false; } } }
poj 2081 Recaman's Sequence (dp)
时间: 2024-12-24 18:21:30