- 凯撒密码
- 2017-05-27 13:57:18 @
#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
string s,b;
int f[70010]={0},g[70010],q[5000],n,m=0,v=0,r=0;
bool min(int& a,int b){ if(a>=b){ a=b; return 1; } return 0; }
int main(){
getline(cin,s); n=s.length();
for(int i=0;i<=n;f[++i]=1<<30)
for(int j=1;j*j<=i;++j)
if(j>=g[i-j*j]&&min(f[i],f[i-j*j]+1)) g[i]=j;
for(int i=n;i;i-=g[i]*g[i]) q[++v]=g[i];
for(int i=1;i<=v;++i){
for(int j=0;j<q[i];++j)
for(int k=0;k<q[i]*q[i];k+=q[i]) b+=s[r+j+k];
r+=q[i]*q[i];
}
cout<<b;
}
0 条评论
目前还没有评论...