代码如下,手搓的几组小数据都没问题
#include<bits/stdc++.h>
#define nmf(i,s,e) for(int i=s;i<=e;i++)
#define ref(i,s,e) for(int i=s;i>=e;i--)
using namespace std;
typedef long long LL;
typedef unsigned long long uLL;
int len[35]={0,3,10,25,56,119,246,501,1012,2035,4082,8177,16368,32751,65518,131053,262124,524267,1048554,2097129,4194280,8388583,16777190,33554405,67108836,134217699,268435426,536870881,1073741792,2147483615};
void solve(int k,int n){
if(n==len[k-1]+1){
printf("m");
return;
}else if(n>len[k-1]+1&&n<len[k]-len[k-1]+1){
printf("o");
return;
}else{
solve(k-1,n-len[k-1]-k-2);
return;
}
}
int main(){
int n,i=0;
cin>>n;
while(len[i]<n)++i;
solve(i,n);
return 0;
}