简单stl运用,只要对mp做标记如果出现过那么肯定是循环,记得初始化
#include <iostream>
#include <map>
#include <vector>
#include <cmath>
using namespace std;
map<vector<int>,int> mp;
vector<int> vt[1111];
int main()
{
int n;
cin>>n;
while(n--)
{
mp.clear();
for(int i=0;i<1111;i++)
vt[i].clear();
int m;
cin>>m;
for(int i=0;i<m;i++)
{
int ans;
cin>>ans;
vt[0].push_back(ans);
}
int cont=1;
for(int i=1;i<=1000;i++)
{
for(int j=0;j<m;j++)
{
vt[i].push_back(abs(vt[i-1][j]-vt[i-1][(j+1)%m]));
}
if(mp[vt[i]]==1)
{
cont=1;
break;
}
mp[vt[i]]=1;
int fg1=0;
for(int j=0;j<m;j++)
{
if(vt[i][j]!=0)
{
fg1=1;
break;
}
}
if(!fg1)
{
cont=2;
break;
}
}
if(cont==1)
cout<<"LOOP"<<endl;
else if(cont==2)
cout<<"ZERO"<<endl;
}
return 0;
}