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

HDU 4162 Shape Number

时间:2016-06-03 22:45:06      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4162

题意:

求给定字符的一阶差分链的最小表示。

题解:

先求一阶差分链,再求一阶差分链的最小表示法。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

const int maxn = 3e5 + 10;

char s1[maxn],s2[maxn];

int solve(char *s) {
    int i = 0, j = 1, k = 0,len=strlen(s);
    while (i < len&&j < len&&k<len) {
        int t = s[(i + k) % len] - s[(j + k) % len];
        if (!t) k++;
        else {
            if (t > 0) i = i + k + 1;
            else j = j + k + 1;
            if (i == j) j++;
            k = 0;
        }
    }
    return i < j ? i : j;
}

int main() {
    while (scanf("%s", s1) == 1) {
        int len = strlen(s1);
        for (int i = 0; i < len; i++) {
            s2[i] = (s1[(i + 1) % len] - s1[i] + 8) % 8 + 0;
        }
        s2[len] = \0;
        //cout << s2 << endl;
        int pos = solve(s2);
        for (int i = 0; i < len; i++) {
            printf("%c", s2[(pos + i) % len]);
        }
        printf("\n");
    }
    return 0;
}

 

HDU 4162 Shape Number

标签:

原文地址:http://www.cnblogs.com/fenice/p/5557650.html

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