码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 1594:Ducci Sequence (模拟 Grade E)

时间:2014-10-17 21:50:17      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   for   sp   div   on   

题意:

对于一个n元组(a0,a1,...),一次变换后变成(|a0-a1|,|a1-a2|,...)

问1000次变换以内是否存在循环。

思路:

模拟,map判重

代码:

#include <cstdio>
#include <cstring>
#include <map>
#include <cmath>
#include <algorithm>
using namespace std;

struct Node{
    int a[16];
    int n;
    void read() {
        for (int i = 0; i < n; i++) {
            scanf("%d", &a[i]);
        }
    }
    void ducci() {
        int tmp = a[0];
        for (int i = 0; i < n-1; i++) {
            a[i] = abs(a[i]-a[i+1]);
        }
        a[n-1] = abs(a[n-1]-tmp);
    }

    bool operator <(const Node &b) const {
        for (int i = 0; i < n; i++) {
            if (a[i] != b.a[i]) return a[i]<b.a[i];
        }
        return false;
    }
    bool iszero() {
        for (int i = 0; i < n; i++) {
            if (a[i] != 0) return false;
        }
        return true;
    }
}lala;

map<Node, bool>vis;

int main() {
    int t;
    scanf("%d", &t);
    while (t--) {
        scanf("%d", &lala.n);
        lala.read();
        vis.clear();
        vis[lala] = true;
        bool isloop = false;
        for (int i = 0; i < 1010; i++) {
            lala.ducci();
            if (vis[lala]) {
                isloop = true;
                break;
            }
            vis[lala] = true;
        }

        if (isloop && !lala.iszero()) puts("LOOP");
        else puts("ZERO");
    }
    return 0;
}

 

UVA 1594:Ducci Sequence (模拟 Grade E)

标签:style   blog   color   io   ar   for   sp   div   on   

原文地址:http://www.cnblogs.com/shinecheng/p/4031981.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!