2015百度之星资格赛1002_列变位法解密


///
作者:tt267
声明:本文遵循以下协议自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0
转载请注明:http://blog.csdn.net/tt2767/article/details/45967567
///


题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=584&pid=1002

这题好麻烦啊,wa了好几次,开始的时候以为思路错了,换用一维数组存储矩阵去做,结果超时了,后来一想是忽略了正常的没有空的情况 ⊙▂⊙ ,加上之后就AC了。。。


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#define INF 999999999
using namespace std;

char cip[100009];

int main()
{
    int Case,key,id=1;
    int j,i,k,space,l,col,row,fly,Count;
    scanf("%d",&Case);
    while(Case--)
    {
        getchar();
        gets(cip);
        scanf("%d",&key);
        printf("Case #%d:\n",id++);

        l = strlen(cip);
        space = l % key; //最后一行的元素个数
        col = l / key + (space?1:0);//原矩阵列数
        //当密匙等于密文长度或等于1时明明什么都没做么。。。。直接输出就好
        if(key == l || key ==1) 
            puts(cip);
        else if(space) //如果存在空位要修改fly值进行输出
        {
            for(i = 0 ; i < col -1 ; i ++)
            {
                fly= col;
                Count = 0;
                for(j = i ; Count != key  ; j += fly)
                {
                    printf("%c",cip[j]);
                    if(Count >=space)
                        fly = col-1;
                    Count++;
                }
            }

            for(j = i ; space-- ; j += col)
            {
                printf("%c",cip[j]);
            }
            puts("");
        }
        else//不存在就正常输出呗
        {
            for(i = 0 ; i < col ;i++)
            {
                for(j = 0 ; j < key ; j++)
                {
                    printf("%c",cip[j*col+i]);
                }
            }
            puts("");
        }
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值