//UVALive 4723 模拟
//有点投机取巧的做法,不判断是否循环,只判断是否为0。因为它已经给出了1000的上限,
//到1000都不为0就循环呗。。。
//重点看某大牛做法,学习set容器的应用。
#include <cstdio>
#include <string.h>
#define N 1001
int num[N][20];
int sum[N];
int main()
{
int T,n,i,j,temp,k;
bool co;
scanf("%d",&T);
while(T--)
{
memset(sum,0,sizeof(sum));
scanf("%d",&n);
for(i=0;i<n;i++)
{ scanf("%d",&num[0][i]);
sum[0]+=num[0][i];
}
k=0; co=false;
for(i=1;i<1005;i++)
{
if(sum[i-1]==0) { printf("ZERO\n"); co=true; break; }
for(j=0;j<n-1;j++)
{
temp=num[i-1][j]-num[i-1][j+1];
if(temp>0) num[i][j]=temp;
else num[i][j]=-1*temp;
sum[i]+=num[i][j];
}
temp=num[i-1][n-1]-num[i-1][0];
if(temp>0) num[i][n-1]=temp;
else num[i][n-1]=-1*temp;
sum[i]+=num[i][n-1];
}
if(!co) printf("LOOP\n");
}
return 0;
}
//某大牛做法,学习了!!!!!!!!
/*
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
bool gao() {
vector < int > v;
set < vector < int > > s;
int n;
cin >> n;
for (int i = 0; i < n; ++i) {
int x;
cin >> x;
v.push_back(x);
}
s.insert(v);
while (1) {
bool zero = 1;
for (int i = 0; i < n; ++i)
if (v[i]) {
zero = 0;
break;
}
if (zero) return 1;
vector < int > a;
for (int i = 1; i < n; ++i)
a.push_back(abs(v[i] - v[i - 1]));
a.push_back(abs(v[0] - v[n - 1]));
if (s.find(a) != s.end()) return 0;
s.insert(a);
v = a;
}
return 1;
}
int main() {
int cas;
cin >> cas;
for (int i = 0; i < cas; ++i)
cout << (gao() ? "ZERO" : "LOOP") << endl;
return 0;
}
*/
uva 4723
最新推荐文章于 2020-03-11 00:05:59 发布