HDU 4162 Shape Number

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 4162 Shape Number相关的知识,希望对你有一定的参考价值。

题目链接:

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的主要内容,如果未能解决你的问题,请参考以下文章

HDU 4162 最小表示法

寒假作业,shape of HDU

HDU 2108 Shape of HDU

Hdu 1207 汉诺塔II

HDU 2108 Shape of HDU (判断是不是凸多边形 叉乘)

HDU2108 Shape of HDU(判定凸多边形-模板)