题目名称:秘密奶牛码

时间限制:1000ms内存限制:64MB提交通过率:39%

题目描述

奶牛正在试验秘密代码,并设计了一种方法来创建一个无限长的字符串作为其代码的一部分使用。给定一个字符串,每次增长,都是将当前串(假设长度为 k)的最后一个字符 s(k)复制一遍放到最后,再将除最后一个字符的以外的部分 s(1),s(2), ...... ,s(k-1)复制到字符串末尾。也就是说,给定一个初始字符串,之后的每一步都会增加当前字符串的长度。给定初始字符串和索引,请帮助奶牛计算无限字符串中位置 N 的字符。

输入描述

输入共 2 行。
第一行输入一个字符串。该字符串包含最多 30 个大写字母。
第二行输入 N,且 N <= 10^18。
请注意,数据可能很大,放进一个标准的 32 位整数可能不够,所以你可能要使用一个 64 位的整数类型(例如,在C / C++ 中是 long long)。

输出描述

请输出从初始字符串生成的无限字符串中的位置 N 的字符。第一个字符是 N=1。

样例1

输入

COW 8

输出

C

AC代码:

#include <bits/stdc++.h>
using namespace std;
char s[33];
int s1;
char f(long long n,long long len){
    if(n <= s1) return s[n - 1];
    else if(n <= len / 2) return f(n,len / 2);
    else if(n == len / 2 + 1) return f(n - 1,len / 2);
    else return f(n - 1 - len / 2,len / 2);
}
int main(){
    long long len,n;
    scanf("%s",s);
    cin >> n;
    s1 = strlen(s);
    len = s1;
    while(len <= n) len *= 2;
    cout << f(n,len);
    return 0;
}

这也是本人的第7个原作品,感谢支持!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值