uva 4723

来源:互联网 发布:南山区软件产业基地 编辑:程序博客网 时间:2024/06/07 04:48
//UVALive 4723      模拟//有点投机取巧的做法,不判断是否循环,只判断是否为0。因为它已经给出了1000的上限,//到1000都不为0就循环呗。。。//重点看某大牛做法,学习set容器的应用。#include <cstdio>#include <string.h>#define N 1001int 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;elsenum[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;elsenum[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;}*/