fork download
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <limits.h>
  4. #include <unistd.h>
  5.  
  6. #define push(a, b) *a = b; a++
  7. #define pop(a, b) a--; b = *a
  8.  
  9. const char n[] = {'N', 'O'};
  10. const char y[] = {'Y', 'E', 'S'};
  11.  
  12. unsigned char arr[100*1024+1] = {};
  13.  
  14. int main(void)
  15. {
  16. unsigned char * arr_p= &arr[0];
  17. unsigned char tmp;
  18. unsigned char *c = &arr[0];
  19.  
  20. read(STDIN_FILENO, arr, sizeof(arr));
  21.  
  22. while (1)
  23. {
  24. switch (*c)
  25. {
  26. case '<':
  27. case '{':
  28. case '[':
  29. case '(':
  30. push (arr_p, *c);
  31. break;
  32.  
  33. case '>':
  34. case '}':
  35. case ']':
  36. pop (arr_p, tmp);
  37. if (tmp != *c - 2)
  38. {
  39. write(STDOUT_FILENO, n, sizeof(n));
  40. return 0;
  41. }
  42. break;
  43.  
  44. case ')':
  45. pop (arr_p, tmp);
  46. if (tmp != *c - 1)
  47. {
  48. write(STDOUT_FILENO, n, sizeof(n));
  49. return 0;
  50. }
  51. break;
  52.  
  53. default:
  54. if ( arr_p != &arr[0] )
  55. write(STDOUT_FILENO, n, sizeof(n));
  56. else
  57. write(STDOUT_FILENO, y, sizeof(y));
  58. return 0;
  59. }
  60. ++c;
  61. }
  62. return 0;
  63. }
Success #stdin #stdout 0s 1928KB
stdin
(([]))<[]>
stdout
YES