[ACM-ICPC][Asia - Seoul] 4723 - Ducci Sequence
A Ducci sequence is a sequence of n-tuples of integers. Given an n-tuple of integers (a1, a2, ... , an), the next n-tuple in the sequence is formed by taking the absolute differences of neighboring integers:

Ducci sequences either reach a tuple of zeros or fall into a periodic loop. For example, the 4-tuple sequence starting with 8,11,2,7 takes 5 steps to reach the zeros tuple:





The 5-tuple sequence starting with 4,2,0,2,0 enters a loop after 2 steps:


















Given an n-tuple of integers, write a program to decide if the sequence is reaching to a zeros tuple or a periodic loop.
Input
Your program is to read the input from standard input. The input consists
of T test cases. The number of test cases T is given in the first line
of the input. Each test case starts with a line containing an integer
n
(3n
15), which represents the size of a tuple in the Ducci
sequences. In the following line, n integers are given which represents
the n-tuple of integers. The range of integers are from 0 to 1,000. You
may assume that the maximum number of steps of a Ducci sequence reaching
zeros tuple or making a loop does not exceed 1,000.
Output
Your program is to write to standard output. Print exactly one line for each test case. Print `LOOP' if the Ducci sequence falls into a periodic loop, print `ZERO' if the Ducci sequence reaches to a zeros tuple.
The following shows sample input and output for four test cases.
Sample Input
4 4 8 11 2 7 5 4 2 0 2 0 7 0 0 0 0 0 0 0 6 1 2 3 1 2 3
Sample Output
ZERO LOOP ZERO LOOP
模擬檢查, 能優化就優化, 不然很容易 TLE
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <map>
using namespace std;
int a[15], stkIdx;
char str[100];
void tran(int n, int st) {
if(!n && st)
str[stkIdx++] = '0';
if(!n) return;
tran(n/10, 0);
str[stkIdx++] = n%10 + '0';
}
void int2str(int n) {
stkIdx = 0;
static int i;
for(i = 0; i < n; i++) {
tran(a[i], 1);
str[stkIdx++] = ' ';
}
str[stkIdx-1] = '\0';
}
int main() {
int t, n, i, j;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
int sum = 0;
for(i = 0; i < n; i++)
scanf("%d", &a[i]), sum += a[i];
map<string, bool> r;
while(sum) {
int2str(n);
if(r[str]) break;
r[str] = true;
sum = 0;
for(i = 1, j = a[0]; i < n; i++)
a[i-1] = abs(a[i-1] - a[i]), sum += a[i-1];
a[n-1] = abs(a[n-1]-j);
sum += a[n-1];
}
if(sum)
puts("LOOP");
else
puts("ZERO");
}
return 0;
}