Source code for submission s616

fq.cpp

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define MOD 1000000
  5. int n;
  6. char s[1111];
  7. int dp[1111][1111];
  8. int solve(int pos, int opened) {
  9. if(pos == n) {
  10. if(opened == 0) return 1;
  11. return 0;
  12. }
  13. if(dp[pos][opened] == -1) {
  14. if(s[pos] == '(') {
  15. if(opened+1 > n/2) dp[pos][opened] = 0;
  16. else dp[pos][opened] = solve(pos+1, opened+1)%MOD;
  17. } else if(s[pos] == ')') {
  18. if(opened-1 < 0) dp[pos][opened] = 0;
  19. else dp[pos][opened] = solve(pos+1, opened-1)%MOD;
  20. } else {
  21. int ans = 0;
  22. if(opened+1 <= n/2) ans += solve(pos+1, opened+1)%MOD;
  23. if(opened-1 >= 0) ans += solve(pos+1, opened-1)%MOD;
  24. dp[pos][opened] = ans%MOD;
  25. }
  26. }
  27. return dp[pos][opened]%MOD;
  28. }
  29. int main() {
  30. char c;
  31. n=0;
  32. while(scanf("%c", &c) == 1) {
  33. if(c == '\n') {
  34. s[n] = '\0';
  35. memset(dp, -1, sizeof(dp));
  36. printf("%d\n", solve(0, 0));
  37. n=0;
  38. } else {
  39. s[n++] = c;
  40. }
  41. }
  42.  
  43. return 0;
  44. }
  45.