제출 #1359721

#제출 시각아이디문제언어결과실행 시간메모리
1359721osmiyum앵무새 (IOI11_parrots)C++20
24 / 100
4 ms836 KiB
#include "encoder.h"
#include "encoderlib.h"

/**
 * M[i] 8-bitlik bir sayıdır. Bunu 2-şer bitlik 4 parçaya böleceğiz.
 * Her parça için bir "kova" (bucket) tanımlıyoruz.
 * Kova ID = (Parça Sırası << 6) | Mesaj İndeksi
 */
void encode(int N, int M[]) {
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < 4; j++) {
            // j-inci 2-bitlik parçayı al (0, 1, 2 veya 3)
            int val = (M[i] >> (j * 2)) & 3;
            
            // Papağana öğreteceğimiz sayı (0-255 aralığında)
            // İlk 2 bit j (parça no), kalan 6 bit i (indeks)
            int parrot_val = (j << 6) | i;
            
            // Veri değeri (val) kadar papağan gönder
            // Eğer val=0 ise hiç papağan gitmez (verimlilik sağlar)
            for (int k = 0; k < val; k++) {
                send(parrot_val);
            }
        }
    }
}
#include "decoder.h"
#include "decoderlib.h"

/**
 * Alınan papağanların değerlerini sayarak frekans tablosu oluşturur.
 * Her i indeksi için 4 parçayı birleştirerek orijinal sayıyı üretir.
 */
void decode(int N, int L, int X[]) {
    // 0-255 arası hangi papağandan kaç tane geldiğini tutan dizi
    static int counts[256];
    
    // Diziyi temizle (Statik olduğu için her çağrıda sıfırlanmalı)
    for (int i = 0; i < 256; i++) counts[i] = 0;
    
    // Gelen tüm papağanları say
    for (int i = 0; i < L; i++) {
        counts[X[i]]++;
    }

    // Her mesaj indeksi için parçaları topla
    for (int i = 0; i < N; i++) {
        int original_byte = 0;
        
        for (int j = 0; j < 4; j++) {
            // Kova ID'sini tekrar oluştur
            int parrot_val = (j << 6) | i;
            
            // Bu kovadaki papağan sayısı, orijinal 2-bitlik veridir
            int val = counts[parrot_val];
            
            // Bitleri doğru konuma yerleştir
            original_byte |= (val << (j * 2));
        }
        
        output(original_byte);
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…