2016春季学习——模拟

来源:互联网 发布:单片机wifi模块 编辑:程序博客网 时间:2024/04/27 22:48

来源: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;}


0 0