完全水题。。。用两个数组交叉赋值就可以了。循环超过1000次(据说超过200次)就可以判断为LOOP
#include<bits/stdc++.h>
using namespace std;
int abs(int a ,int b)
{
return a>b?a-b:b-a;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)//每一个数据
{
int n;
scanf("%d",&n);
int tp[2][n];
for (int i=0;i<n;i++)
{
scanf("%d",&tp[0][i]);
// printf("%d ",tp[0][i]);
}
// printf("\n");
int maxn=1004;
int flag=1;// 1为不是全0,0为全0
while(maxn--)//每一次循环
{
flag=0;
for(int i=0;i<n-1;i++)
{
tp[maxn%2][i]=abs(tp[(maxn+1)%2][i],tp[(maxn+1)%2][i+1]);
if(tp[maxn%2][i]!=0)
flag=1;
}
tp[maxn%2][n-1]=abs(tp[(maxn+1)%2][n-1],tp[(maxn+1)%2][0]);
if(tp[maxn%2][n-1]!=0)
flag=1;
// for(int i=0;i<n;i++)
// {
// printf("%d ",tp[maxn%2][i]);
// }
// printf("\n");
if(flag==0)
break;
}
if(T==0)
{
if(!flag)
printf("ZERO");
else
printf("LOOP");
}
else
{
if(!flag)
printf("ZERO\n");
else
printf("LOOP\n");
}
}
return 0;
}
vector 作为容器的
- for (auto &i:d) 用迭代器来循环。如果是传的引用,后面还可以给迭代器赋值
-
printf(i==200?"LOOP\n":"ZERO\n"); \\这一行代码第一次看到
#include<bits/stdc++.h>
using namespace std;
int abs(int a,int b)
{
return a>b?a-b:b-a;
}
bool is_zero(vector<int> &d)
{
for (auto &i:d)
if (i)
return false;
return true;
}
int main(void)
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
vector <int> d(n);
for (auto &i:d)
scanf("%d",&i);
int i=-1;
while(++i<200)
{
int D0=d[0];
for (int j=0;j<n-1;j++)
d[j]=abs(d[j],d[j+1]);
d[n-1]=abs(d[n-1],D0);
if(is_zero(d))
break;
}
printf(i==200?"LOOP\n":"ZERO\n");
}
return 0;
}