Felix Halim .NET  
Google 
Name:  Message:

Problem D - Email from the Professor

Complete Problem Statement here

Diberikan string plaintext, dan sebuah key untuk meng-enkripsi-nya. Cara meng-enkripsi plaintext tersebut adalah dengan me-wrap around plaintext dengan width K (sehingga tercipta K columns of characters dan R baris). Lalu pengkodeannya adalah dengan membaca column (a1,a2,a3..aK) dari baris paling atas ke paling bawah dimana a1..aK adalah permutasi dari 0..K-1.

Soal ini hanya men-simulasikan apa yang ada di soal, jadi pintar-pintarnya kalian membuat program tanpa bug. Algoritmanya simple, anda cukup melakukan inverse dari key yang diberikan, lalu tinggal anda print per kolom dari baris pertama sampai terakhir, tetapi hati-hati dengan baris terakhir, bisa jadi sudah melebihi panjang string inputnya. Untuk lebih jelasnya lihat source code dibawah.

#include <stdio.h>
#include <string.h>

int idx[1000], inv[1000];
char s[1001];

int main(){
    while (gets(s)){
        int i,j,k,row,len=strlen(s);

        scanf("%d",&k);
        for (i=0; i<k; i++)
            scanf("%d",&idx[i]);
        scanf("\n");                             // baca ending new line

        for (i=0; i<k; i++)
            inv[idx[i]-1] = i;                   // inverse idx, tampung di inv

        row = (len+k-1)/k;                       // berapa baris yang tercipta, dibulatkan keatas

        for (i=0; i<k; i++)                      // looping pertama, untuk setiap kolum dari 0..k-1
            for (j=0; j<row; j++){               // looping kedua, print dari baris atas sampai bawah
                if (inv[i]<len)                  // hati hati, cek apakah index sekarang melebihi input?
                    printf("%c",s[inv[i]]);
                inv[i] += k;                     // lanjutkan ke baris berikutnya
            }
        
        puts("");
    }
}

Lihat problem lain:

  1. Minimum Swap
  2. GCD!
  3. Playing With Domino
  4. Email from the Professor
  5. Panda Number
  6. Jakarta Traffic Jam
  7. Sultan's Land
  8. Tree Median
Kembali ke halaman utama

© Felix Halim 2009 (Loaded in 0.00152 secs)