前两次为了节省点内存SB了。。。浪费了时间 结果TLE
#include <stdio.h>
#include <string.h>
char pass[100000+10];
char str[200000+10];
bool vis[200000+10];
int main()
{
int ncase,t=1;
scanf("%d",&ncase);
while(ncase--)
{
int n,len,m;
memset(vis,false,sizeof(vis));
gets(pass);
gets(pass);
scanf("%d",&n);
len=strlen(pass);
if(len%n==0)
{
m=len/n;
}
else
{
m=len/n+1;
}
int r=m*n-len;
int len2=m*n;
int temp=r;
int j=len-1;
for(int i=len2;i>0;i--)
{
if(i%m==0&&temp)
{
temp--;
vis[i]=true;
}
else
str[i]=pass[j--];
}
printf("Case #%d:\n",t++);
for(int k=1;k<=m;k++)
{
for(int i=k;i<=len2;i+=m)
{
if(!vis[i])
printf("%c",str[i]);
}
}
printf("\n");
}
}列变位法解密(2016"百度之星" - 测试赛(热身,陈题))
原文:http://blog.csdn.net/su20145104009/article/details/51356171