UVa 1594 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:
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
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:
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
The 5-tuple sequence starting with 4,2,0,2,0 enters a loop after 2 steps:
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
![$\displaystyle \rightarrow$](http://uva.onlinejudge.org/external/15/4723img1.png)
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, nintegers 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
这道题比较水啊,注意一点就是an-a1的时候a1有可能已经改变
#include <bits/stdc++.h> using namespace std; int main() { int T; cin >> T; next: while(T--) { int n; vector<int> num; cin >> n; for(int i = 0; i < n; i++) { int t; cin >> t; num.push_back(t); } for(int cnt = 0; cnt < 1024; cnt++) { bool flag = true; int temp = num[0]; for(int i = 0; i < num.size() - 1; i++) num[i] = abs(num[i] - num[i+1]); num[num.size()-1] = abs(num[num.size()-1] - temp); for(int i = 0; i < num.size(); i++) if(num[i]!=0) flag = false; if(flag==true) { cout << "ZERO" << endl; goto next; } } cout << "LOOP" << endl; } return 0; }