Submission #28705

#TimeUsernameProblemLanguageResultExecution timeMemory
28705탕탕탕! 핑거팁 니 맘을 겨눌게~ (#68)Wine Tasting (FXCUP2_wine)C11
0 / 1
0 ms1116 KiB
#include <stdio.h> #define LEFT_CHILD(x) (2*x + 1) #define RIGHT_CHILD(x) (2*x + 2) #define PARENT(x) ((x-1)/2) #define SWAP(a,b) {int t; t = a; a=b; b=t;} void HeapSort(int *base, int n); void InitHeap(int *base, int n); void MakeHeap(int *base, int n); void HeapSort(int *base, int n) { int on = n; InitHeap(base, n); n--; SWAP(base[0], base[n]); while (n>1) { MakeHeap(base, n); n--; SWAP(base[0], base[n]); } } void InitHeap(int *base, int n) { int pa = 0; int now; int i; for (i = 1; i<n; i++) { now = i; while (now>0) { pa = PARENT(now); if (base[now]>base[pa]) { SWAP(base[now], base[pa]); now = pa; } else { break; } } } } int FindMaxIndex(int *base, int n, int now); void MakeHeap(int *base, int n) { int now = 0; int mp = 0; while (LEFT_CHILD(now) < n) { int mp = FindMaxIndex(base, n, now); if (mp == now) { break; } SWAP(base[mp], base[now]); now = mp; } } int FindMaxIndex(int *base, int n, int now) { int lc = LEFT_CHILD(now); int rc = RIGHT_CHILD(now); if (rc >= n) { if (base[now]<base[lc]) { return lc; } return now; } if (base[lc]<base[rc]) { return rc; } return lc; } int main() { int N, K, i, first = 0, end = 1; int *wine; long long int flavor = 0; scanf("%d %d", &N, &K); wine = (int*)malloc(sizeof(int)*N); for (i = 0; i < N; i++) scanf("%d", &wine[i]); HeapSort(wine, N); for (i = 0; i < K; i = i + 2) { if (i == 0) { flavor = wine[N - end]; end++; continue; } flavor += wine[N - end] - wine[0 + first]; end++; first++; } printf("%lld", flavor); return 0; }

Compilation message (stderr)

wine.c: In function 'HeapSort':
wine.c:14:6: warning: unused variable 'on' [-Wunused-variable]
  int on = n;
      ^
wine.c: In function 'MakeHeap':
wine.c:55:6: warning: unused variable 'mp' [-Wunused-variable]
  int mp = 0;
      ^
wine.c: In function 'main':
wine.c:93:15: warning: implicit declaration of function 'malloc' [-Wimplicit-function-declaration]
  wine = (int*)malloc(sizeof(int)*N);
               ^
wine.c:93:15: warning: incompatible implicit declaration of built-in function 'malloc'
wine.c:93:15: note: include '<stdlib.h>' or provide a declaration of 'malloc'
wine.c:92:2: warning: ignoring return value of 'scanf', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &N, &K);
  ^
wine.c:95:3: warning: ignoring return value of 'scanf', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &wine[i]);
   ^
#Verdict Execution timeMemoryGrader output
Fetching results...