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:
- Minimum Swap
- GCD!
- Playing With Domino
- Email from the Professor
- Panda Number
- Jakarta Traffic Jam
- Sultan's Land
- Tree Median
Kembali ke halaman utama
|