列变位法解密
Accepts: 132
Submissions: 351
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
前两次为了节省点内存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");
}
}