很简单的一道题,但是因为定义的set s放在了循环外面导致s内的数据在每次循环开始时没有重置,所以坑了很长时间,还是太粗心......
不用set也可以做,因为根据题意它给的数组最后结果不是ZERO,就是LOOP,所以可以直接循环1000次,有ZERO就输出ZERO,1000次结束后还没有ZERO就输出LOOP(见有的博客说循环200次就行了= =)。
#include <iostream>
#include <vector>
#include <set>
#include <cstdio>
#include <cmath>
using namespace std;
bool solve(vector<int> &a, int n)
{
int s = a[0];
for(int i = 0; i < n-1; i++)
a[i] = abs(a[i+1]-a[i]);
a[n-1] = abs(a[n-1]-s);
for(int i = 0; i < n; i++)
if(a[i] != 0) return false;
return true;
}
int main()
{
int T;
//freopen("input.txt", "r", stdin);
cin >> T;
while(T--)
{
set<vector<int> > s;
int n;
cin >> n;
vector<int> a;
for( int i = 0; i < n; i++) {
int num;
cin >> num;
a.push_back(num);
}
while(1) {
if(solve(a,n) ) {
cout << "ZERO" << endl;
break;
}
else if(s.find(a) == s.end() ) s.insert(a);
else {
cout << "LOOP" << endl;
break;
}
}
}
return 0;
}
不用set也可以做,因为根据题意它给的数组最后结果不是ZERO,就是LOOP,所以可以直接循环1000次,有ZERO就输出ZERO,1000次结束后还没有ZERO就输出LOOP(见有的博客说循环200次就行了= =)。