P3612. Secret Cow Code S 发表于 2023-10-11 分类于 洛谷 阅读次数: Waline: 本文字数: 235 阅读时长 ≈ 1 分钟 考点 分治 字符串 题解 12345678910111213141516171819202122232425262728#include <bits/stdc++.h>using namespace std;typedef long long ll;int main(){ string s; ll n, len; cin >> s >> n; len = s.length(); while (len < n) len *= 2; while (len > s.length()) { if (n > len / 2) { if (n == len / 2 + 1) n = len / 2; else n -= len / 2 + 1; } len /= 2; } cout << s[n - 1]; return 0;} 思路 典型的分治题 题目大意是说,每次Copy一份当前字符串,把它最后一个字母挪到最前面,再接到原字符串后面,循环往复 假设原字符串为a,复制的字符串为b,那么每个字符串都是由a+b的格式组成的 先求出n所在字符串的长度len,然后进行以下判断: n的位置在len/2及以内,说明是在原字符串a,那么n不变 n的位置大于len/2,将其位置映射到a中 len除以2 循环往复,直到len等于最初始的字符串长度