运用set判断是否重复就可以简单求解。
之前WA了一次
因为最后写了
if(T) cout<<endl;//不用判断是不是最后一行,因为题目说所有结果都要独占一行
AC代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <set>
#include <math.h>
using namespace std;
set<vector<int> > s;
int main(){
int T,n,a;
cin >> T;
while(T--){
s.clear();
cin >> n;int cnt = n;
int f = 0;
vector<int> v;
while(cnt--){
cin >> a;
v.push_back(a);
}
s.insert(v);
while(1){
vector<int> t;
bool is_zero = true;
for(int i =0;i<n-1;i++){
t.push_back(abs(v[i]-v[i+1]));
if(v[i]-v[i+1]!=0) is_zero = false;
}
t.push_back(abs(v[n-1]-v[0]));
if(v[n-1]!=v[0]) is_zero = false;
if(is_zero) {f=2;break;}
else if(s.count(t)){f=1;break;}
else{
s.insert(t);
v = t;
}
}
if(f==2) cout<<"ZERO";
if(f==1) cout<<"LOOP";
cout<<endl;
}
return 0;
}
原文地址:http://blog.csdn.net/iboxty/article/details/45951221