1. 程式人生 > >洛谷【P1885】Moo

洛谷【P1885】Moo

class get turn problem line tchar code while 奶牛

我對分治的理解:https://www.cnblogs.com/AKMer/p/9728574.html

題目傳送門:https://www.luogu.org/problemnew/show/P1885

這題跟[[洛谷【P3612】USACO17JAN Secret Cow Code秘密奶牛碼差不太多,都是分治字符串然後亂搞一波就行了。

時間復雜度:\(O(logn)\)

空間復雜度:\(O(1)\)

代碼如下:

#include <cstdio>
using namespace std;

int n;
char s[4]={' ','m','o','o'};

int read() {
    int x=0,f=1;char ch=getchar();
    for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
    for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
    return x*f;
}

char find(int id) {
    if(id<4)return s[id];
    int tmp=3,pos=0;
    while(tmp<id)tmp=tmp*2+4+pos,pos++;
    int mid=tmp-pos-3;mid/=2;
    if(id<=mid)return find(mid);
    if(id<=mid+pos+3) {
        if(id!=mid+1)return 'o';
        else return 'm';
    }
    return find(id-(mid+pos+3));
}

int main() {
    n=read();
    printf("%c",find(n));
    return 0;
}

洛谷【P1885】Moo