답안 #272138

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
272138 2020-08-18T09:44:55 Z sjimed 저장 (Saveit) (IOI10_saveit) C++14
100 / 100
248 ms 12160 KB
#include "grader.h"
#include "encoder.h"
#include<bits/stdc++.h>
using namespace std;

#define fast ios::sync_with_stdio(false); cin.tie(0);
#define fi first
#define se second
#define all(v) (v).begin(), (v).end()
#define em emplace
#define eb emplace_back
#define mp make_pair

typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const ll INF = 1e18;
const int inf = 1e9;

static int n, h, m;
static int ans[40][1010];
static vector<int> g[1010];
static int p[1010];
static bool chk[1010];

static void dfs(int x) {
  chk[x] = true;
  for(auto i : g[x]) {
    if(chk[i]) continue;

    p[i] = x;
    dfs(i);
  }
}

void encode(int nv, int nh, int ne, int *v1, int *v2){
  n = nv;
  h = nh;
  m = ne;

  for(int i=0; i<m; i++) {
    g[v1[i]].eb(v2[i]);
    g[v2[i]].eb(v1[i]);
  }

  dfs(0);

  for(int i=0; i<n; i++) {
    for(int j=0; j<10; j++) {
      if(p[i] & (1<<j)) encode_bit(1);
      else encode_bit(0);
    }
  }

  for(int s=0; s<h; s++) {
    queue<int> q;

    q.em(s);
    ans[s][s] = 1;

    while(q.size()) {
      int x = q.front();
      q.pop();

      for(auto i : g[x]) {
        if(ans[s][i]) continue;

        ans[s][i] = ans[s][x] + 1;
        q.em(i);
      }
    }
  }

  for(int i=0; i<h; i++) {
    for(int j=0; j<n; j++) {
      ans[i][j]--;
    }
  }

  int l = 5;

  for(int i=0; i<h; i++) {
    for(int j=1; j < n; j+=l) {

      int t = 0;
      for(int k=0; k < l; k++) {
        t *= 3;
        if(j + k < n) t += (ans[i][j+k] - ans[i][p[j + k]]) + 1;
      }
     
      for(int k=0; k < 2*l-2; k++) {
        if(t & (1<<k)) encode_bit(1);
        else encode_bit(0);
      }
    }
  }

  for(int i=0; i<h; i++) {
    for(int j=0; j<10; j++) {
      if(ans[i][0] & (1<<j)) encode_bit(1);
      else encode_bit(0);
    }
  }
}
#include "grader.h"
#include "decoder.h"
#include<bits/stdc++.h>
using namespace std;

#define fast ios::sync_with_stdio(false); cin.tie(0);
#define fi first
#define se second
#define all(v) (v).begin(), (v).end()
#define em emplace
#define eb emplace_back
#define mp make_pair

typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const ll INF = 1e18;
const int inf = 1e9;

static int n, h;
static int p[1010];
static int ans[40][1110];
static vector<int> g[1010];

static void dfs(int x) {
   for(auto i : g[x]) {
      for(int j=0; j<h; j++) 
         ans[j][i] += ans[j][x];
      
      dfs(i);
   }
}

void decode(int nv, int nh) {
   n = nv;
   h = nh;

   for(int i=0; i<n; i++) {
      int b = 0;
      for(int j=0; j<10; j++) {
         if(decode_bit()) b |= 1<<j;
      }

      p[i] = b;
      if(i) g[p[i]].eb(i);
   }

   int l = 5;

   for(int i=0; i<h; i++) {
      for(int j=1; j<n; j+=l) {
         int d = 0;
         for(int k=0; k<2*l-2; k++) {
            d |= decode_bit() << k;
         }

         for(int k = l-1; k >= 0; k--) {
            ans[i][j+k] = d % 3 - 1;
            d /= 3;
         }
      }
   }

   for(int i=0; i<h; i++) {
      for(int j=0; j<10; j++) {
         if(decode_bit()) ans[i][0] |= 1 << j;
      }
   }

   dfs(0);

   for(int i=0; i<h; i++) {
      for(int j=0; j<n; j++) {
         hops(i, j, ans[i][j]);
      }
   }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 248 ms 12160 KB Output is correct - 67960 call(s) of encode_bit()
2 Correct 3 ms 4808 KB Output is correct - 104 call(s) of encode_bit()
3 Correct 25 ms 5972 KB Output is correct - 61200 call(s) of encode_bit()
4 Correct 4 ms 4908 KB Output is correct - 140 call(s) of encode_bit()
5 Correct 32 ms 6060 KB Output is correct - 61200 call(s) of encode_bit()
6 Correct 35 ms 6276 KB Output is correct - 67960 call(s) of encode_bit()
7 Correct 49 ms 6520 KB Output is correct - 67960 call(s) of encode_bit()
8 Correct 30 ms 5848 KB Output is correct - 65266 call(s) of encode_bit()
9 Correct 28 ms 5888 KB Output is correct - 67960 call(s) of encode_bit()
10 Correct 34 ms 5960 KB Output is correct - 67960 call(s) of encode_bit()
11 Correct 34 ms 6076 KB Output is correct - 67960 call(s) of encode_bit()
12 Correct 28 ms 5996 KB Output is correct - 67960 call(s) of encode_bit()
13 Correct 60 ms 6520 KB Output is correct - 67960 call(s) of encode_bit()
14 Correct 28 ms 5888 KB Output is correct - 67960 call(s) of encode_bit()
15 Correct 32 ms 6016 KB Output is correct - 67960 call(s) of encode_bit()
16 Correct 46 ms 6384 KB Output is correct - 67960 call(s) of encode_bit()
17 Correct 50 ms 6500 KB Output is correct - 67960 call(s) of encode_bit()
18 Correct 64 ms 6696 KB Output is correct - 67960 call(s) of encode_bit()
19 Correct 45 ms 6172 KB Output is correct - 67960 call(s) of encode_bit()
20 Correct 82 ms 6776 KB Output is correct - 67960 call(s) of encode_bit()
21 Correct 93 ms 7088 KB Output is correct - 67960 call(s) of encode_bit()
22 Correct 63 ms 6392 KB Output is correct - 67960 call(s) of encode_bit()
23 Correct 93 ms 7544 KB Output is correct - 67960 call(s) of encode_bit()
# 결과 실행 시간 메모리 Grader output
1 Correct 248 ms 12160 KB Output is correct - 67960 call(s) of encode_bit()
2 Correct 3 ms 4808 KB Output is correct - 104 call(s) of encode_bit()
3 Correct 25 ms 5972 KB Output is correct - 61200 call(s) of encode_bit()
4 Correct 4 ms 4908 KB Output is correct - 140 call(s) of encode_bit()
5 Correct 32 ms 6060 KB Output is correct - 61200 call(s) of encode_bit()
6 Correct 35 ms 6276 KB Output is correct - 67960 call(s) of encode_bit()
7 Correct 49 ms 6520 KB Output is correct - 67960 call(s) of encode_bit()
8 Correct 30 ms 5848 KB Output is correct - 65266 call(s) of encode_bit()
9 Correct 28 ms 5888 KB Output is correct - 67960 call(s) of encode_bit()
10 Correct 34 ms 5960 KB Output is correct - 67960 call(s) of encode_bit()
11 Correct 34 ms 6076 KB Output is correct - 67960 call(s) of encode_bit()
12 Correct 28 ms 5996 KB Output is correct - 67960 call(s) of encode_bit()
13 Correct 60 ms 6520 KB Output is correct - 67960 call(s) of encode_bit()
14 Correct 28 ms 5888 KB Output is correct - 67960 call(s) of encode_bit()
15 Correct 32 ms 6016 KB Output is correct - 67960 call(s) of encode_bit()
16 Correct 46 ms 6384 KB Output is correct - 67960 call(s) of encode_bit()
17 Correct 50 ms 6500 KB Output is correct - 67960 call(s) of encode_bit()
18 Correct 64 ms 6696 KB Output is correct - 67960 call(s) of encode_bit()
19 Correct 45 ms 6172 KB Output is correct - 67960 call(s) of encode_bit()
20 Correct 82 ms 6776 KB Output is correct - 67960 call(s) of encode_bit()
21 Correct 93 ms 7088 KB Output is correct - 67960 call(s) of encode_bit()
22 Correct 63 ms 6392 KB Output is correct - 67960 call(s) of encode_bit()
23 Correct 93 ms 7544 KB Output is correct - 67960 call(s) of encode_bit()
# 결과 실행 시간 메모리 Grader output
1 Correct 248 ms 12160 KB Output is correct - 67960 call(s) of encode_bit()
2 Correct 3 ms 4808 KB Output is correct - 104 call(s) of encode_bit()
3 Correct 25 ms 5972 KB Output is correct - 61200 call(s) of encode_bit()
4 Correct 4 ms 4908 KB Output is correct - 140 call(s) of encode_bit()
5 Correct 32 ms 6060 KB Output is correct - 61200 call(s) of encode_bit()
6 Correct 35 ms 6276 KB Output is correct - 67960 call(s) of encode_bit()
7 Correct 49 ms 6520 KB Output is correct - 67960 call(s) of encode_bit()
8 Correct 30 ms 5848 KB Output is correct - 65266 call(s) of encode_bit()
9 Correct 28 ms 5888 KB Output is correct - 67960 call(s) of encode_bit()
10 Correct 34 ms 5960 KB Output is correct - 67960 call(s) of encode_bit()
11 Correct 34 ms 6076 KB Output is correct - 67960 call(s) of encode_bit()
12 Correct 28 ms 5996 KB Output is correct - 67960 call(s) of encode_bit()
13 Correct 60 ms 6520 KB Output is correct - 67960 call(s) of encode_bit()
14 Correct 28 ms 5888 KB Output is correct - 67960 call(s) of encode_bit()
15 Correct 32 ms 6016 KB Output is correct - 67960 call(s) of encode_bit()
16 Correct 46 ms 6384 KB Output is correct - 67960 call(s) of encode_bit()
17 Correct 50 ms 6500 KB Output is correct - 67960 call(s) of encode_bit()
18 Correct 64 ms 6696 KB Output is correct - 67960 call(s) of encode_bit()
19 Correct 45 ms 6172 KB Output is correct - 67960 call(s) of encode_bit()
20 Correct 82 ms 6776 KB Output is correct - 67960 call(s) of encode_bit()
21 Correct 93 ms 7088 KB Output is correct - 67960 call(s) of encode_bit()
22 Correct 63 ms 6392 KB Output is correct - 67960 call(s) of encode_bit()
23 Correct 93 ms 7544 KB Output is correct - 67960 call(s) of encode_bit()
# 결과 실행 시간 메모리 Grader output
1 Correct 248 ms 12160 KB Output is correct - 67960 call(s) of encode_bit()
2 Correct 3 ms 4808 KB Output is correct - 104 call(s) of encode_bit()
3 Correct 25 ms 5972 KB Output is correct - 61200 call(s) of encode_bit()
4 Correct 4 ms 4908 KB Output is correct - 140 call(s) of encode_bit()
5 Correct 32 ms 6060 KB Output is correct - 61200 call(s) of encode_bit()
6 Correct 35 ms 6276 KB Output is correct - 67960 call(s) of encode_bit()
7 Correct 49 ms 6520 KB Output is correct - 67960 call(s) of encode_bit()
8 Correct 30 ms 5848 KB Output is correct - 65266 call(s) of encode_bit()
9 Correct 28 ms 5888 KB Output is correct - 67960 call(s) of encode_bit()
10 Correct 34 ms 5960 KB Output is correct - 67960 call(s) of encode_bit()
11 Correct 34 ms 6076 KB Output is correct - 67960 call(s) of encode_bit()
12 Correct 28 ms 5996 KB Output is correct - 67960 call(s) of encode_bit()
13 Correct 60 ms 6520 KB Output is correct - 67960 call(s) of encode_bit()
14 Correct 28 ms 5888 KB Output is correct - 67960 call(s) of encode_bit()
15 Correct 32 ms 6016 KB Output is correct - 67960 call(s) of encode_bit()
16 Correct 46 ms 6384 KB Output is correct - 67960 call(s) of encode_bit()
17 Correct 50 ms 6500 KB Output is correct - 67960 call(s) of encode_bit()
18 Correct 64 ms 6696 KB Output is correct - 67960 call(s) of encode_bit()
19 Correct 45 ms 6172 KB Output is correct - 67960 call(s) of encode_bit()
20 Correct 82 ms 6776 KB Output is correct - 67960 call(s) of encode_bit()
21 Correct 93 ms 7088 KB Output is correct - 67960 call(s) of encode_bit()
22 Correct 63 ms 6392 KB Output is correct - 67960 call(s) of encode_bit()
23 Correct 93 ms 7544 KB Output is correct - 67960 call(s) of encode_bit()