본문 바로가기

알고리즘 문제 풀이/Baekjoon

18110 - solved.ac

반응형
SMALL

 

 

18110번: solved.ac

5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다.

www.acmicpc.net

 

개 같은 문제 (내 실력이)

 

#include <stdio.h>

const int LN = 3 * 1e5 + 10;

int N, minus; float R;
int ARR[LN];
int minComp(int x, int y) { return x < y; }
void swap(int& x, int& y) { int z = x; x = y; y = z; }

struct PQ {
  int hn;
  int heap[LN];
  int (*comp)(int, int);

  void init() {
    hn = 0;
    comp = minComp;
  }

  void push(int v) {
    heap[++hn] = v;

    for (int c = hn; c > 1; c /= 2) {
      if (comp(heap[c], heap[c / 2])) { swap(heap[c], heap[c / 2]); }
      else break;
    }
  }

  int pop() {
    swap(heap[1], heap[hn--]);

    for (int c = 2; c <= hn; c *= 2) {
      if (c < hn && comp(heap[c + 1], heap[c])) { c++; }
      if (comp(heap[c], heap[c / 2])) { swap(heap[c], heap[c / 2]); }
      else break;
    }

    return heap[hn + 1];
  }
} minq;

void init() {
  minq.init();

  scanf("%d", &N);

  for (int n = 0; n < N; ++n) {
    int t;

    scanf("%d", &t);

    minq.push(t);
  }

  for (int n = 1; n <= N; ++n) {
    ARR[n] = minq.pop();
  }
}

void cal() {
  minus = N * 0.15 + 0.5;

  for (int n = minus + 1; n <= N - minus; ++n) {
    R += ARR[n];
  }
}

int main(void) {
  // freopen("18110.txt", "r", stdin);

  init();

  cal();

  int RR = R / (N - 2 * minus) + 0.5;

  if (N) {
    printf("%d", RR);
  } else {
    printf("0");
  }

  return 0;
}

 

힙 + 수학 (c++로 입출력하는 문제 개싫당)

반응형
LIST

'알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글

19646 - Random Generator  (0) 2023.12.24
1849 - 순열  (0) 2023.12.24
1300 - K번째 수  (1) 2023.12.23
6236 - 용돈 관리  (2) 2023.12.22
1777 - 순열복원  (2) 2023.12.22