Sicily 1036. Crypto Columns

来源:互联网 发布:win7优化内存 编辑:程序博客网 时间:2024/05/29 18:49

其实就是解码问题,那么首先就要明白编码原则:将信息以每一行为关键字的长度进行排列,然后以关键字每一个字符的字典序大小,依次对每一对应列进行输出。然后对这个原则进行逆向推导即可,相关细则就不一一叙说了(很久以前做的题目了,不太记得了……)。

Run Time: 0sec

Run Memory: 288KB

Code length: 1186Bytes

SubmitTime: 2010-12-2223:00:21

// Problem#: 1036// Submission#: 530409// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/// All Copyright reserved by Informatic Lab of Sun Yat-sen University#include <stdio.h>#include <string.h>void sort( char character[], int number[] );int main(){    char keyword[ 11 ], ciphertext[ 101 ];    int order[ 10 ];    char end[] = { "THEEND" };    int column, c, row, r;    while ( !0 ) {         gets( keyword );        if ( strstr( keyword, end ) )            break;        column = strlen( keyword );        gets( ciphertext );        row = strlen( ciphertext ) / column;        sort( keyword, order );        for( r = 1; r <= row; r++ ) {            for( c = 1; c <= column; c++ ) {                printf( "%c", ciphertext[ order[ c-1 ] * row + r - 1 ] );            }        }        printf( "\n" );    }         return 0;}void sort( char character[], int number[] ){    int n, m, odr;    for ( n = 0; character[ n ] != '\0'; n++ ) {        for ( m = 0, odr = 0; character[ m ] != '\0'; m++ ) {            if ( n == m )                continue;            if ( character[ n ] == character[ m ] && n > m )                 odr++;            if ( character[ n ] > character[ m ] )                 odr++;        }        number[ n ] = odr;    }}                                 


 

 

原创粉丝点击