Submission #573375

#TimeUsernameProblemLanguageResultExecution timeMemory
573375TimDeeParrots (IOI11_parrots)C++14
98 / 100
11 ms1368 KiB
#include "encoder.h"
#include "encoderlib.h"
#define forn(i,n) for (int i=0; i<n; i++)

#include <vector>
void encode(int n, int message[]) {
    forn(i,n) {
        int x=message[i];
        int add=i*4;
        std::vector<int> v;
        while (x) {
            v.push_back(x%4);
            x/=4;
        }
        for (int i=0; i<v.size(); i++) {
            if (v[i]!=3) forn(j,v[i]) send(add+i);
            else {
                int j=i+1;
                while (j<v.size() && v[i]==v[j]) j++;
                forn(k,2+j-i) send(add+i);
                i=j-1;
            }           
        }
    }
}
#include "decoder.h"
#include "decoderlib.h"

#define forn(i,n) for (int i=0; i<n; i++)

struct node {
    int fcnt=0,scnt=0,tcnt=0,pcnt=0;
};

#include <vector>
void decode(int N, int L, int message[]) {
    int a[N];
    node v[N];
    forn(i,N) a[i]=0;
    forn(i,L) {
        int x=message[i];
        int j=x/4;
        int k=x%4;
        if (k==0) {
            v[j].fcnt++;
        } else if (k==1) {
            v[j].scnt++;
        } else if (k==2) {
            v[j].tcnt++;
        } else {
            v[j].pcnt++;
        }
    }
    forn(i,N) {
        int x=v[i].fcnt, y=v[i].scnt, z=v[i].tcnt, d=v[i].pcnt;
        std::vector<int> vec;
        vec.push_back(x);
        vec.push_back(y);
        vec.push_back(z);
        vec.push_back(d);
        for (int j=0; j<4; j++) {
            if (vec[j]<3) {
                a[i]+=vec[j]*(1<<(2*j));
            } else {
                int h=vec[j];
                int s=j;
                while (h>=3) {
                    a[i]+=3*(1<<(2*s));
                    s++;
                    h--;
                }
            }
        }
        output(a[i]);
    }
}

Compilation message (stderr)

encoder.cpp: In function 'void encode(int, int*)':
encoder.cpp:15:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   15 |         for (int i=0; i<v.size(); i++) {
      |                       ~^~~~~~~~~
encoder.cpp:19:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |                 while (j<v.size() && v[i]==v[j]) j++;
      |                        ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...