24h購物| | PChome| 登入
2012-09-22 07:49:05| 人氣945| 回應0 | 上一篇 | 下一篇

[ACM-ICPC][Asia - Seoul] 4723 - Ducci Sequence

推薦 0 收藏 0 轉貼0 訂閱站台

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:

(a1, a2, ... , an) $displaystyle rightarrow$ (| a1 - a2|,| a2 - a3|, ... ,| an - a1|)

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:

(8, 11, 2, 7) $displaystyle rightarrow$ (3, 9, 5, 1) $displaystyle rightarrow$ (6, 4, 4, 2) $displaystyle rightarrow$ (2, 0, 2, 4) $displaystyle rightarrow$ (2, 2, 2, 2) $displaystyle rightarrow$ (0, 0, 0, 0).

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

(4, 2, 0, 2, 0) $displaystyle rightarrow$ (2, 2, 2, 2, 4) $displaystyle rightarrow$ (0, 0, 0, 2, 2) $displaystyle rightarrow$ (0, 0, 2, 0, 2) $displaystyle rightarrow$ (0, 2, 2, 2, 2) $displaystyle rightarrow$ (2, 0, 0, 0, 2) $displaystyle rightarrow$

(2, 0, 0, 2, 0) $displaystyle rightarrow$ (2, 0, 2, 2, 2) $displaystyle rightarrow$ (2, 2, 0, 0, 0) $displaystyle rightarrow$ (0, 2, 0, 0, 2) $displaystyle rightarrow$ (2, 2, 0, 2, 2) $displaystyle rightarrow$ (0, 2, 2, 0, 0) $displaystyle rightarrow$

(2, 0, 2, 0, 0) $displaystyle rightarrow$ (2, 2, 2, 0, 2) $displaystyle rightarrow$ (0, 0, 2, 2, 0) $displaystyle rightarrow$ (0, 2, 0, 2, 0) $displaystyle rightarrow$ (2, 2, 2, 2, 0) $displaystyle rightarrow$ (0, 0, 0, 2, 2) $displaystyle rightarrow$ ...

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 (3$ le$n$ le$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;
}

台長: Morris
人氣(945) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: UVA |
此分類下一篇:[ACM-ICPC][Asia - Seoul][Farthest Pair] 4728 - Squares
此分類上一篇:[UVA][類似SCC] 12442 - Forwarding Emails

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文