user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  lea    D5(%rip),%r14
  lea    -0x3c(%rbp),%rsi
  push   %r13
  mov    %r14,%rdi
  push   %r12
  push   %rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x38(%rbp)
  xor    %eax,%eax
  call   <scanf@plt>
  movslq -0x3c(%rbp),%rdx
  mov    %rsp,%rsi
  mov    %rdx,%rax
  lea    0xf(,%rdx,4),%rdx
  mov    %rdx,%rcx
  and    $0xfffffffffffff000,%rdx
  sub    %rdx,%rsi
  and    $0xfffffffffffffff0,%rcx
  cmp    %rsi,%rsp
  je     L48
L111:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rsi,%rsp
  jne    L111
L48:
  and    $0xfff,%ecx
  sub    %rcx,%rsp
  test   %rcx,%rcx
  jne    L224
L14:
  mov    %rsp,%r13
  test   %eax,%eax
  jle    L236
  mov    %r13,%r15
  mov    %r13,%r12
  xor    %ebx,%ebx
  nopl   0x0(%rax)
L61:
  mov    %r12,%rsi
  mov    %r14,%rdi
  add    $0x1,%ebx
  add    $0x4,%r12
  call   <scanf@plt>
  mov    -0x3c(%rbp),%eax
  cmp    %ebx,%eax
  jg     L61
  test   %eax,%eax
  jle    L236
  lea    -0x1(%rax),%edx
  cmp    $0x4,%edx
  jbe    L132
  mov    %eax,%edx
  pxor   %xmm2,%xmm2
  movdqa %xmm2,%xmm3
  shr    $0x2,%edx
  movdqa %xmm2,%xmm1
  movdqa %xmm2,%xmm4
  shl    $0x4,%rdx
  add    %r13,%rdx
  nopl   0x0(%rax)
L219:
  movdqu (%r15),%xmm0
  add    $0x10,%r15
  movdqa %xmm0,%xmm5
  pcmpgtd %xmm4,%xmm5
  psubd  %xmm5,%xmm1
  movdqa %xmm4,%xmm5
  pcmpgtd %xmm0,%xmm5
  pcmpeqd %xmm4,%xmm0
  psubd  %xmm5,%xmm3
  psubd  %xmm0,%xmm2
  cmp    %rdx,%r15
  jne    L219
  movdqa %xmm2,%xmm0
  mov    %eax,%edi
  psrldq $0x8,%xmm0
  and    $0xfffffffc,%edi
  paddd  %xmm0,%xmm2
  movdqa %xmm2,%xmm0
  psrldq $0x4,%xmm0
  paddd  %xmm0,%xmm2
  movdqa %xmm3,%xmm0
  psrldq $0x8,%xmm0
  movd   %xmm2,%ecx
  paddd  %xmm0,%xmm3
  movdqa %xmm3,%xmm0
  psrldq $0x4,%xmm0
  paddd  %xmm0,%xmm3
  movdqa %xmm1,%xmm0
  psrldq $0x8,%xmm0
  movd   %xmm3,%esi
  paddd  %xmm0,%xmm1
  movdqa %xmm1,%xmm0
  psrldq $0x4,%xmm0
  paddd  %xmm0,%xmm1
  movd   %xmm1,%edx
  test   $0x3,%al
  je     L0
L6:
  movslq %edi,%r8
  lea    0x0(%r13,%r8,4),%r8
  mov    (%r8),%r9d
  test   %r9d,%r9d
  jle    L204
  add    $0x1,%edx
L165:
  lea    0x1(%rdi),%r9d
  cmp    %r9d,%eax
  jle    L0
  cmpl   $0x0,0x4(%r8)
  jle    L182
  add    $0x1,%edx
L146:
  lea    0x2(%rdi),%r9d
  cmp    %eax,%r9d
  jge    L0
  cmpl   $0x0,0x8(%r8)
  jle    L167
  add    $0x1,%edx
L145:
  lea    0x3(%rdi),%r9d
  cmp    %r9d,%eax
  jle    L0
  cmpl   $0x0,0xc(%r8)
  jle    L221
  add    $0x1,%edx
L162:
  add    $0x4,%edi
  cmp    %edi,%eax
  jle    L0
  cmpl   $0x0,0x10(%r8)
  jle    L228
  add    $0x1,%edx
L0:
  pxor   %xmm3,%xmm3
  pxor   %xmm2,%xmm2
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm3
  lea    D19(%rip),%r12
  cvtsi2ss %esi,%xmm2
  mov    %r12,%rdi
  cvtsi2ss %ecx,%xmm1
  cvtsi2ss %edx,%xmm0
  divss  %xmm3,%xmm2
  divss  %xmm3,%xmm1
  movss  %xmm2,-0x48(%rbp)
  divss  %xmm3,%xmm0
  movss  %xmm1,-0x44(%rbp)
  call   <printf@plt>
  movss  -0x48(%rbp),%xmm2
  mov    %r12,%rdi
  movaps %xmm2,%xmm0
  call   <printf@plt>
  movss  -0x44(%rbp),%xmm1
  mov    %r12,%rdi
  movaps %xmm1,%xmm0
  call   <printf@plt>
  mov    -0x38(%rbp),%rax
  sub    %fs:0x28,%rax
  jne    L278
  lea    -0x28(%rbp),%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
L204:
  je     L129
  add    $0x1,%esi
  jmp    L165
L182:
  je     L139
  add    $0x1,%esi
  jmp    L146
L167:
  je     L55
  add    $0x1,%esi
  jmp    L145
L224:
  orq    $0x0,-0x8(%rsp,%rcx,1)
  jmp    L14
L129:
  add    $0x1,%ecx
  jmp    L165
L139:
  add    $0x1,%ecx
  jmp    L146
L55:
  add    $0x1,%ecx
  jmp    L145
L221:
  je     L178
  add    $0x1,%esi
  jmp    L162
L228:
  je     L303
  add    $0x1,%esi
  jmp    L0
L236:
  xor    %ecx,%ecx
  xor    %esi,%esi
  xor    %edx,%edx
  jmp    L0
L178:
  add    $0x1,%ecx
  jmp    L162
L132:
  xor    %edi,%edi
  xor    %ecx,%ecx
  xor    %esi,%esi
  xor    %edx,%edx
  jmp    L6
L303:
  add    $0x1,%ecx
  jmp    L0
L278:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D5
data_type: string
name: disassemble_data
arguments: label: D19
data_type: string

tool: D5: %d

tool: D19: %.6f


assistant: ```c
int main() {
  int n;
  scanf("%d", &n);
  int arr[n];
  for (int arr_i = 0; arr_i < n; arr_i++) {
    scanf("%d", &arr[arr_i]);
  }
  int positives = 0;
  int negatives = 0;
  int zeroes = 0;
  for (int arr_i = 0; arr_i < n; arr_i++) {
    if (arr[arr_i] > 0) {
      positives++;
    } else if (arr[arr_i] < 0) {
      negatives++;
    } else {
      zeroes++;
    }
  }
  float size = (float)n;
  float positive_ratio = positives / size;
  float negative_ratio = negatives / size;
  float zeroes_ratio = zeroes / size;
  printf("%.6f\n", positive_ratio);
  printf("%.6f\n", negative_ratio);
  printf("%.6f\n", zeroes_ratio);
  return 0;
}
```