Problem:
Score : 100 points

Problem Statement

Takahashi wants to print a document with N pages double-sided, where two pages of data can be printed on one sheet of paper.

At least how many sheets of paper does he need?

Constraints

N is an integer.

1 \leq N \leq 100

Input

Input is given from Standard Input in the following format:

N

Output

Print the answer.

Sample Input 1

5

Sample Output 1

3

By printing the 1-st, 2-nd pages on the 1-st sheet, 3-rd and 4-th pages on the 2-nd sheet, and 5-th page on the 3-rd sheet, we can print all the data on 3 sheets of paper.

Sample Input 2

2

Sample Output 2

1

Sample Input 3

100

Sample Output 3

50

Solution in C (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int **pBingo = (int **) malloc(sizeof(int *) * 3);
  for (int i = 0; i < 3; i++)
  {
    pBingo[i] = (int *) malloc(sizeof(int) * 3);
  }

  int **pBingoMat = (int **) malloc(sizeof(int *) * 3);
  for (int i = 0; i < 3; i++)
  {
    pBingoMat[i] = (int *) malloc(sizeof(int) * 3);
  }


  for (int i = 0; i < 3; i++)
  {
    char *pRow = (char *) malloc(sizeof(char) * 20);
    fgets(pRow, sizeof(pRow), stdin);

    int pos = 0;
    for (int j = 0; j < 3; j++)
    {
      int val = 0;
      while ('0' <= pRow[pos] && pRow[pos] <= '9') // ' ' != pRow[pos] && '\n' != 
      {
        val = val * 10 + pRow[pos] - '0';
        pos ++;
      }
      pBingo[i][j] = val;
      pos ++;
    }
    // printf("%d, %d, %d", pBingo[i][0], pBingo[i][1], pBingo[i][2]);
    free(pRow);
  }

  // printf("Input N");
  char pN[2];
  fgets(pN, sizeof(pN), stdin);

  int N = 0;
  {
    int pos = 0;
    while ('0' <= pN[pos] && pN[pos] <= '9')
    {
      N = N * 10 + pN[pos] - '0';
      pos ++;
    }
  }

  int *pB = (int *) malloc(sizeof(int) * N);
  {
    int pos = 0;
    char buf[3];
    for (int i = 0; i < N; i++)
    {
      fgets(buf, sizeof(buf), stdin);

      int val = 0;
      pos = 0;
      while('0' <= buf[pos] && buf[pos] <= '9')
      {
        val = val * 10 + buf[pos] - '0';
        pos++;
      }
      pB[i] = val;
      // printf("%d\n", pB[i]);

      for (int i = 0; i < 3; i++)
      {
        for (int j = 0; j < 3; j++)
        {
          pBingoMat[i][j] = pBingoMat[i][j] || (pBingo[i][j] == val) ? 1 : 0;
        } 
      }
    }
  }

  for (int i = 0; i < 3; i++)
  {
    int sum = 0;
    for (int j = 0; j < 3; j++)
    {
      sum += pBingoMat[i][j];
    }
    if (3 == sum)
    {
      printf("Yes");
      return 0;
    }
  }

  for (int i = 0; i < 3; i++)
  {
    int sum = 0;
    for (int j = 0; j < 3; j++)
    {
      sum += pBingoMat[j][i];
    }
    if (3 == sum)
    {
      printf("Yes");
      return 0;
    }
  }

  {
    int sum = 0;
    for (int j = 0; j < 3; j++)
    {
      sum += pBingoMat[j][j];
    }
    if (3 == sum)
    {
      printf("Yes");
      return 0;
    }
  }

  {
    int sum = 0;
    for (int j = 0; j < 3; j++)
    {
      sum += pBingoMat[2-j][2-j];
    }
    if (3 == sum)
    {
      printf("Yes");
      return 0;
    }
  }

  printf("No");
  return 0;
}