[USACO 2012 Feb B]Moo - 规律

评测网址

在这里插入图片描述在这里插入图片描述
题意:
某字符串由m o 两个字符构成
而且构成的字符串为前一个字符串 + m + o * (i+2) + 前一个字符串 *(i+2)指的是数量
问字符串第n个字符是什么
思路:
在从一个字符串构成下一个字符串的时候,是有一定的规律的,所以我们可以很轻松地找到规律
然后就可以递归地找,满足规律的时候直接输出

ll a[maxn], n;
char ans[5] = {'m', 'm', 'o', 'o'};
void f(ll num) {
    int pos = 0;
    if(num <= 3) {
        cout << ans[num] << endl;
        return ;
    }
    for(int i = 1; i <= 100; i++) {
        if(num < a[i]) {
            pos = i - 1;
            break;
        }
    }
    debug(pos);
    if(num  - a[pos] <= pos + 4) {
        if(num - a[pos] == 1) {
            puts("m");
            return ;
        } else {
            puts("o");
            return ;
        }
    } else
        f(num - a[pos] - pos - 4);
}
int main() {
    n = read;
    a[0] = 3;
    for(int i = 1; i <= 100; i++) {
        a[i] = a[i - 1] * 2 + i + 3;
    }
    for(int i=1;i<=4;i++){
        cout << a[i] << " ";
    }
    puts("");
    f(n);
    return 0;
}
/**


**/
posted @ 2021-08-15 14:52  PushyTao  阅读(69)  评论(0编辑  收藏  举报