来源:HDU4161
题意很简单,就不说了。。。感觉由于经常由于模拟导致TLE有的时候都不敢去模拟了,不过这一题就是模拟水过去了。。。
只有一个技巧,模拟超过一定次数后(比如超时了,就可以认为是无解了)。。。无语了。。。
AC代码(VJ):
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int MAXN=30;
int a[MAXN];
int b[MAXN];
int n;
int moni(){
int i;
int cnt=1;
bool flag;
while(cnt<1000){
for(i=0;i<n-1;i++)
b[i]=fabs(fabs(a[i+1])-fabs(a[i]));
b[n-1]=fabs(fabs(a[n-1])-fabs(a[0]));
flag=true;
for(i=1;i<n;i++)
if(b[0]!=b[i]){
flag=false;
break;
}
if(flag==false){
for(i=0;i<n;i++)
a[i]=b[i];
cnt++;
continue;
}
else return cnt;
}
return -1;
}
int main(){
int k=1;
while(scanf("%d",&n)!=EOF&&n){
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
printf("Case %d: ",k++);
memset(b,0,sizeof(b));
int re=1;
for(int i=1;i<n;i++)
if(a[0]!=a[i]){
re=0;
break;
}
if(re==1){
printf("0 iterations\n");
continue;
}
int ans;
ans=moni();
if(ans==-1)
printf("not attained\n");
else
printf("%d iterations\n",ans);
}
return 0;
}