Run Time: 0.290
Ranking (as of 2016-07-26): 191 out of 477
Language: C++
/*
UVa 1594 - Ducci Sequence
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_1594_Ducci_Sequence.cpp
*/
#include <set>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int n_max = 15, seq_max = 1024;
struct tuple_ {
int integers_[n_max];
} tuples[seq_max];
struct tuple_comparator {
int n_;
tuple_comparator(int n) : n_(n) {}
bool operator() (const tuple_* ti, const tuple_* tj) const {
for (int i = 0; i < n_; i++)
if (ti->integers_[i] != tj->integers_[i])
return ti->integers_[i] < tj->integers_[i];
return false;
}
};
int main()
{
int T;
scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
bool zero = true;
for (int i = 0; i < n; i++) {
scanf("%d", &tuples[0].integers_[i]);
if (tuples[0].integers_[i])
zero = false;
}
if (!zero) {
set<tuple_*, tuple_comparator> st(n);
st.insert(&tuples[0]);
for (int i = 1; ; i++) {
zero = true;
for (int j = 0; j < n; j++)
if (tuples[i].integers_[j] =
abs(tuples[i - 1].integers_[j] - tuples[i - 1].integers_[(j + 1) % n]))
zero = false;
if (zero)
break;
#ifdef DEBUG
for (int j = 0; j < n; j++)
printf("%d%c", tuples[i].integers_[j], ((j < n - 1) ? ' ' : '\n'));
#endif
pair<set<tuple_*, tuple_comparator>::iterator, bool> result = st.insert(&tuples[i]);
if (!result.second)
break;
}
}
puts((zero) ? "ZERO" : "LOOP");
}
return 0;
}
No comments:
Post a Comment