思路:字符串长度len先扩展到n以上,再每次除以2(右移1位),k-1,再减去len,特殊情况有处理
char c[301];
unsigned long long t;
main(){
unsigned long long l=0;
char ch;
while((ch=getchar())^' ')
c[l++]=ch;
scanf("%lld",&t),t--;
int rep=0,l1=l;
while(l<t)l<<=1,++rep;
while(rep--){
if(t<l1)break;
l>>=1,t--;
t>l&&(t-=(1+l));
}
putchar(c[t]);
}
带注释版:
char c[31];
long long t;
main(){
long long l=0;
char ch;
while((ch=getchar())^' ')
c[l++]=ch;
scanf("%lld",&t);t--;
int rep=0,l1=l;
while(l<t)l<<=1,++rep;
printf("l=%lld rep=%d\n",l,rep);
while(rep--){
if(t<l1)break;
l>>=1;printf("l=%lld ",l);
if(t<l)t--,printf("0)t=%lld",t);
else if(t==l)t--,printf("1)t=%lld",t);
else t-=(1+l),printf("2)t=%lld",t);
puts("");
}
printf("Result:t=%lld\n",t);
putchar(c[t]);
}
求助各位神犇!!!