Unaccepted

题目总版

DXCcn @ 2024-11-29 23:35:56

希蒙的神奇字符串1

题目描述

希蒙最近在学习字符串操作,它用如下的规则逐一的构造出新的字符串:

S(0) = moo

S(1) = S(0) + m + ooo + S(0) = moo + m + ooo + moo = moomooomoo

S(2) = S(1) + m + oooo + S(1) = moomooomoo + m + oooo + moomooomoo = moomooomoomoooomoomooomoo

希蒙 就这样产生字符串,直到最后产生的那个字符串长度不小于读入的整数 N 才停止。

通过上面观察,可以发现第 k 个字符串是由:第 k−1 个字符串 + m + (k+2 个 o) + 第 k-1个字符串连接起来的。

现在的问题是:给出一个整数 N (1 \leq N \leq 10^9),问第 N 个字符是字母 m 还是 o?

输入格式

一个正整数 N

输出格式

一个字符,m 或者 o

样例 #1

样例输入 #1

11

样例输出 #1

m

提示

样例解释:

由题目所知:字符串 S(0) 是 moo, 现在要求第 11 个字符,显然字符串 S(0)不够长;

同样 S(1) 的长度是 10,也不够长;S(2) 的长度是 25,够长了,S(2) 的第 11 个字符是 m,所以答案就输出 m。

#include <iostream>
#include <string>

using namespace std;
int n,sum;
unsigned long long int a[30];
string b[30];

void initializea(){
    a[0]=3;
    for(int i=1;i<=25;i++){
        a[i]=a[i-1]*2+(i+2);
    }

}

void initializeb(int x){
    b[0]="moo";
    for(int i=1;i<=x;i++){
        b[i]=b[i-1]+'m';
        for(int k=0;k<i+2;k++){
            b[i]+='o';
        }
        b[i]+=b[i-1];
    }
}

int main(){
    initializea();
    cin>>n;
    for(int i=0;i<=25;i++){
        if(n<=a[i]){
            sum=i;
            break;
        }
    }
    initializeb(sum);
    cout<<b[sum][n-1];
    return 0;
}

求大佬帮助。Pls


|