标签:10 int 变换 Str 字符串 abcdef 个字符
对于字符串 \(s\) 定义一个变换 \(f(s)\) 表示, \(∀1≤k≤⌊|s|/2⌋\) ,将 \(s\) 中从后往前第 \(k\) 个字符插入从前往后第 \(k\) 个字符和第 \(k+1\) 个字符之间后得到的字符串,例如 abcdef 变换后得到 afbecd 。
现在给出用 \(f(s)\) 变换过 \(k\) 次以后的字符串(即执行 \(k\) 次 \(s:=f(s)\)),求变换之前的字符串。
输入格式
第一行一个整数 \(k\) 。
第二行一个字符串 \(s\) 。
输出格式
输出 \(k\) 次变换之前的字符串。
样例输入
4
acefdb
样例输出
abcdef
数据范围
时限1s 空间256M
对于 50% 的数据, \(k≤100\) 。
对于 100% 的数据, \(1≤k≤10^9,3≤|s|≤10^3\) 。
既然是要往前找,所以操作改为把奇数位和偶数位的数分开,奇数位的倒着插入回去。
看到\(k\)那么大,就知道肯定是有规律的,所以如果出现一个和第一个相同的字符串就不用找了。最后用k模周期长度,找到那个字符串。
#include<iostream>
using namespace std;
string s[1005],t;
int k;
int main()
{
cin>>k>>s[0];
for(int i=1;;i++)
{
t="";
for(int j=0;j<s[i-1].size();j+=2)
t.push_back(s[i-1][j]);
for(int j=s[i-1].size()-1;j>=0;j--)
if(j&1)
t.push_back(s[i-1][j]);
if(t==s[0])
{
cout<<s[k%i];
return 0;
}
s[i]=t;
}
}
标签:10,int,变换,Str,字符串,abcdef,个字符 来源: https://www.cnblogs.com/mekoszc/p/16181411.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。