题意:
某 字符串 由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; } /** **/