Source code for submission s1138

main.cpp

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4.  
  5. void printArr(int n, int** arr){
  6. for(int i = 0; i < n; i++){
  7. for(int j = 0; j < n; j++){
  8. printf("[%d] ", arr[i][j]);
  9. }
  10. printf("\n");
  11. }
  12. }
  13.  
  14. void setCol(int n, int col, int elem, int** arr){
  15. for(int i = 0; i < n; i++){
  16. arr[i][col] = elem;
  17. }
  18. }
  19.  
  20. int func(int level, int elems, int n, int** arr){
  21. //printf("L%d E%d\n", level, elems);
  22. if(level < 0) return 0;
  23. if(level > 0 && elems == 0) return 0;
  24. int val = arr[level][n - elems];
  25. //printf("VAL:%d\n", val);
  26. if(val == 1){
  27. //printf("val1\n");
  28. return func(level + 1, elems -1, n, arr);
  29. }
  30. if(val == -1){
  31. //printf("val-1\n");
  32. return func(level - 1, elems - 1, n, arr);
  33. }
  34. if(level == elems) return 1;
  35.  
  36. return func(level + 1, elems -1, n, arr) + func(level - 1, elems - 1, n, arr);
  37. }
  38.  
  39. int main(int argc, char** argv){
  40. while(1){
  41. char buf[1024];
  42. if(scanf("%s", buf) == 0) break;
  43. int n = strlen(buf);
  44. int** arr = new int*[n];
  45. for(int i = 0; i < n; i++){
  46. arr[i] = new int[n];
  47. for(int j = 0; j < n; j++){
  48. arr[i][j] = 0;
  49. }
  50. }
  51.  
  52. for(int i = 0; i < n; i++){
  53. char c = buf[i];
  54. switch(c){
  55. case '.':{
  56. continue;
  57. break;
  58. }
  59. case '(':{
  60. setCol(n, i, 1, arr);
  61. break;
  62. }
  63. case ')':{
  64. setCol(n, i, -1, arr);
  65. break;
  66. }
  67. }
  68. }
  69. //printArr(n, arr);
  70. printf("%d\n", func(0, n, n, arr));
  71. }
  72. return 0;
  73. }
  74.