[USACO17JAN] Secret Cow Code S

题面翻译

奶牛正在试验秘密代码,并设计了一种方法来创建一个无限长的字符串作为其代码的一部分使用。

给定一个字符串,让后面的字符旋转一次(每一次正确的旋转,最后一个字符都会成为新的第一个字符)。也就是说,给定一个初始字符串,之后的每一步都会增加当前字符串的长度。

给定初始字符串和索引,请帮助奶牛计算无限字符串中位置 \(N\) 的字符。

第一行输入一个字符串。该字符串包含最多 \(30\) 个大写字母,数据保证 \(N \leq 10^{18}\) 。

第二行输入 \(N\)。请注意,数据可能很大,放进一个标准的 \(32\) 位整数可能不够,所以你可能要使用一个 \(64\) 位的整数类型(例如,在 C/C++ 中是 long long)。

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

样例 #1

样例输入 #1

COW 8

样例输出 #1

C

提示

In this example, the initial string COW expands as follows:

COW -> COWWCO -> COWWCOOCOWWC

以上为题目。

这道题题目描述很简单,就是将一个字符串的最后一个字符当作第一个字符,然后将剩下的字符复制下来。

有一个很朴素的想法,那就是模拟题目中所描述的字符串旋转的过程,创造一个长度大于N的字符串,最后直接输出Arr[N-1]即可,代码如下

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
long long N = 0;
string S;
void Solve(string& s)
{
if (s.size() >= N)
{
return;
}
int len = s.size() - 1;
s.push_back(s[s.size() - 1]);
for (int i = 0; i < len; i++)
{
s.push_back(s[i]);
}
Solve(s);
}
int main()
{
cin >> S >> N;
Solve(S);
cout << S[N-1];
return 0;
}

可想而知,如果N足够大,字符串的长度也会惊人的大,最后导致MLE。

因此,我们要想一种方法,不用真正的模拟出旋转后的字符串,而是仅通过递推来找出目标字符在未旋转字符串中的位置

不如假设经过多次旋转操作后的字符串长度为2*N

根据题目描述,则此字符串的排列有以下特点(这里我们用数字来代表单个字符)

\(1, 2, 3, 4, 5, ...,N,N+1,N+2,...,2N\)

其中,N即为旋转前字符串的最后一个字符,而N+1即为旋转后新增字符串的第一个字符,简而言之,就是

\(Str[N]==Str[N+1]\)

根据旋转的规则,显然我们有N左边的字符串和N+1右边的字符串对应相等,即\(Str[1]==Str[N+2]\),以此类推。

而且,题设中所寻找的无限字符串第K位置上的数,总是在N+1 ~ 2N范围之内,所以我们可以不断的二分缩小查找区间,让N+1 ~ 2N内的问题变为1 ~ N内的问题。

也就是对于题目 N+2<=K<=2*N, Str[K] = Str[K-N-1],而对于K==N+1的情况,要进行特判

以下为代码

#include<iostream>
#include<string>
using namespace std;
string S;
long long k, t;
void Solve(long long K)
{
//递归推出条件即为n收敛到子字符串内,便输出推出递归
if (n <= S.size())
{
cout << S[n - 1];
return;
}
long long N = S.size();
while ((N << 1) < K)N <<= 1;
//这里使用左移位替代乘2
//通过不断乘以二来试探出解题所需要的最小N(即满足使得N+1<= K<=2*N的N)
K = K - N - 1;//将问题区间缩小至1~N
if (K == 0)K = N;//对于K==N+1情况的特判
Solve(K);//继续递归缩小区间 }
int main()
{
cin >> S >> k;//数据输入
Solve(k);
return 0;
}

洛谷P3612 [USACO17JAN] Secret Cow Code S的更多相关文章

  1. 洛谷【P3612】[USACO17JAN]Secret Cow Code秘密奶牛码

    我对分治的理解:https://www.cnblogs.com/AKMer/p/9728574.html 题目传送门:https://www.luogu.org/problemnew/show/P36 ...

  2. 洛谷P3611 [USACO17JAN]Cow Dance Show奶牛舞蹈

    题目描述 After several months of rehearsal, the cows are just about ready to put on their annual dance p ...

  3. 洛谷P3605 [USACO17JAN] Promotion Counting 晋升者计数 [线段树合并]

    题目传送门 Promotion Counting 题目描述 The cows have once again tried to form a startup company, failing to r ...

  4. Secret Cow code(USACO)

    题目描述:zxyer为了防止他的标程被别人抄走,他在计算机中的rar文件上设置了一个密码,其中每一个密码都有一个初始字符串,字符串由大写字母组成,且长度不超过30位,每一个密码还有一个询问,询问为一个 ...

  5. 洛谷P3608 [USACO17JAN]Balanced Photo平衡的照片

    P3608 [USACO17JAN]Balanced Photo平衡的照片 题目描述 Farmer John is arranging his NN cows in a line to take a ...

  6. 洛谷 P3609 [USACO17JAN]Hoof, Paper, Scissor蹄子剪刀…

    P3609 [USACO17JAN]Hoof, Paper, Scissor蹄子剪刀… 题目背景 欢迎提供翻译,请直接在讨论区发帖,感谢你的贡献. 题目描述 You have probably hea ...

  7. 洛谷P1472 奶牛家谱 Cow Pedigrees

    P1472 奶牛家谱 Cow Pedigrees 102通过 193提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 农民约翰准备 ...

  8. 洛谷 P2888 [USACO07NOV]牛栏Cow Hurdles

    题目戳 题目描述 Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the ...

  9. 洛谷P2888 [USACO07NOV]牛栏Cow Hurdles

    题目描述 Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the gan ...

  10. 洛谷 P2986 [USACO10MAR]Great Cow Gat…(树形dp+容斥原理)

    P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat… 题目描述 Bessie is planning the annual Great Cow Gathering for c ...

随机推荐

  1. RSAC创新沙盒十强出炉,这家SCA公司火了

    引言 近日,全球网络安全行业创新风向标RSAC创新沙盒公布了本年度入围十强的名单,软件供应链安全企业Endor Labs凭借基于依赖关系建立应用开发生命周期的解决方案获得了广泛关注. Endor La ...

  2. 四、mycat垂直分库

    系列导航 一.Mycat实战---为什么要用mycat 二.Mycat安装 三.mycat实验数据 四.mycat垂直分库 五.mycat水平分库 六.mycat全局自增 七.mycat-ER分片 一 ...

  3. Kubernetes 权限管理

    1. 概述 Kubernetes 中用户分登陆用户和 service account.登陆用户可通过 kubectl config 查看上下文,以及当前上下文: [root@chunqiu ~ (Ma ...

  4. 关于《 MultipartFile 的 file.transferTo 》 的坑

    错误原因: Controller只能接收一次 MultipartFile的文件, 如果再将接收的 MultipartFile文件 传递给 其他的service , 那么其他的 service 则获取不 ...

  5. Linux-进程管理-ps-kill

  6. [转帖]Linux中查看各文件夹大小命令du -h --max-depth=1

    https://www.cnblogs.com/the-tops/p/8798678.html 最近排查服务器异常的时候,常会遇到磁盘慢的情况,这个时候,查找那个文件夹占用的内存的时候常用到这个命令: ...

  7. [转帖]Nginx reuseport 导致偶发性卡顿

    https://github.com/jonmeredith/tcpperf https://plantegg.github.io/2023/06/08/Nginx%20reuseport%20%E5 ...

  8. 【转帖】Linux 调优篇 :虚拟化调优(irqbalance 网卡中断绑定)* 贰

    一.网络流量上不去二.中断绑定2.1 关闭中断平衡守护进程2.2 脱离中断平衡守护进程2.3 手动设置中断的CPU亲和性三. 总结 一.网络流量上不去 在Linux的网络调优方面,如果你发现网络流量上 ...

  9. Python学习之十三_pip的学习

    Python学习之十三_pip的学习 pip的含义 pip: pip is the package installer for Python. You can use pip to install p ...

  10. [转帖]python库Paramiko

    https://zhuanlan.zhihu.com/p/456447145 测试过程中经常会遇到需要将本地的文件上传到远程服务器上,或者需要将服务器上的文件拉到本地进行操作,以前安静经常会用到xft ...