[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;
}
/**
**/