Untitled

 avatar
unknown
c_cpp
2 years ago
1.2 kB
7
Indexable
//12602 - OuQ String
#include <stdio.h>
#include <string.h>

long long len[53];
char s[4] = "OuQ";

void solve(int k, long long l, long long r){

    if(l > r) return;
    if(k == 1){
        for(int i = l; i <= r; i++){
            printf("%c", s[i]);
        }
        return;
    }

    if(l == 0){
        printf("O");
        l = l + 1;
    }

    if(r > len[k-1] && l <= len[k-1]){
        solve(k-1, l-1, len[k-1]-1);
        l = len[k-1]+1;
    }
    else if(r <= len[k-1] && l < len[k-1]){
        solve(k-1, l-1, r-1);
    }

    if(l == 1 + len[k-1]){
        printf("u");
        l = l + 1;
    }

    if(l >= 2 + len[k-1] && r < 2*len[k-1]+2){
        solve(k-1, l-len[k-1]-2, r-2-len[k-1]);
    }
    else if(l >= 2 + len[k-1] && r >= 2*len[k-1]+2){
        solve(k-1, l-len[k-1]-2, len[k-1]-1);
    }

    if(r == len[k]-1) printf("Q");
}

int main(){
    int k;
    long long l ,r;
    len[1] = 3;
    for(int i = 2; i <= 50; i++){
        len[i] = 2*len[i-1] + 3;
    }
    while(scanf("%d%lld%lld", &k, &l, &r) != EOF){
        solve(k,l,r);
        printf("\n");
    }
    return 0;
}
Editor is loading...