10分,不知道为什么错求助各位!
查看原帖
10分,不知道为什么错求助各位!
246331
mystic_qwq楼主2023/9/4 19:00

思路:字符串长度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--;//start with 0
  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]);
}

求助各位神犇!!!

2023/9/4 19:00
加载中...