Untitled

 avatar
unknown
plain_text
3 years ago
1.6 kB
4
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int k,x;
long long int l,r;
char sk[110];
long long int len[55];
void end(int k,int l,int r);

int main(void){

    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){ //他不一定有幾次
        end(k,l,r);
        for(int j=0;j<r-l+1;j++){   //因為怕時間太久只考慮要印出的100個
            printf("%c",sk[j]);
            sk[j]='\0'; //有可能還要用所以清掉
        }
        printf("\n");
        x=0;

    }
    return 0;
}

void end(int k,int l,int r){
    for(int i=l;i<=r;i++){  //看看要印出的100(內)個是那些字(以下部分圖解)
        if(i==0){
            sk[x]='O';
            x++;
        }
        if(0<i && i<len[k]/2){
            if(r<len[k]/2){
                end(k-1,i-1,r-1);
                i=r;
            }
            else{
                end(k-1,i-1,len[k-1]-1);
                i=len[k]/2;
            }
        }
        if(i==(len[k]/2)){
            sk[x]='u';
            x++;
        }
        if(len[k]/2<i && i<len[k]-1){
            if(r<len[k]-1){
                end(k-1,i-len[k-1]-2,r-len[k]/2-1);
                i=r;
            }
            else{
                end(k-1,i-len[k-1]-2,len[k-1]-1);
                i=len[k]-2;
            }
        }
        if(i==len[k]-1){
            sk[x]='Q';
            x++;
        }
    }
}