很水的一道题,我开始怕超时还在找什么优化方案,,,
直接一遍遍循环操作并且判断就好了,不会超时,而且题目已经说了 最多到 1000 次就可以知道结果
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 20;
int a[maxn], n;
bool is_zero(int *a) {
for(int i = 0; i < n; ++i)
if(a[i] != a[0]) return false;
return true;
}
void init() {
scanf("%d", &n);
for(int i = 0 ; i < n; ++i)
scanf("%d", &a[i]);
}
int d(int a, int b) {
return a > b ? a-b : b-a;
}
void solve() {
for(int j = 0; j < 1000; ++j) {
int t = a[0];
int i;
for(i = 0; i < n-1; ++i)
a[i] = d(a[i], a[i+1]);
a[i] = d(a[i], t);
if(is_zero(a)) {
cout << "ZERO" << endl;
return;
}
}
cout << "LOOP" << endl;
return;
}
int main() {
int T;
scanf("%d", &T);
while(T--) {
init();
solve();
}
return 0;
}