Unaccepted
  • 板块题目总版
  • 楼主DXCcn
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/29 23:35
  • 上次更新2024/11/30 10:37:06
查看原帖
Unaccepted
1095596
DXCcn楼主2024/11/29 23:35

希蒙的神奇字符串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(1N109)N (1 \leq N \leq 10^9),问第 N 个字符是字母 m 还是 o?

输入格式

一个正整数 NN

输出格式

一个字符,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

2024/11/29 23:35
加载中...