Source code for submission s601

fq.cpp

  1. #include <vector>
  2. #include <list>
  3. #include <map>
  4. #include <set>
  5. #include <algorithm>
  6. #include <numeric>
  7. #include <utility>
  8. #include <sstream>
  9. #include <iostream>
  10. #include <iomanip>
  11. #include <cstdio>
  12. #include <cmath>
  13. #include <cstdlib>
  14. #include <string>
  15.  
  16. #define vi vector <int>
  17. #define vl vector <long long>
  18. #define vpii vector <pair <int,int> >
  19. #define mp(x,y) make_pair(x,y)
  20. #define all(x) (x).begin(),(x).end()
  21. #define sz(x) (int)(x).size()
  22. #define FOR(i,n) for(ll i=0;i<int(n);i++)
  23. #define READ(v,n) {FOR(i,n){ll x;cin>>x;v.pb(x);} }
  24. #define gmin(a,b) {if (b<a) a=b;}
  25. #define gmax(a,b) {if (b>a) a=b;}
  26. #define pb push_back
  27. #define ppb pop_back
  28. typedef long long ll;
  29. typedef unsigned long long ull;
  30. using namespace std;
  31.  
  32. int main(){
  33. string s;
  34.  
  35. while(cin>>s) {
  36. int count = 0;
  37. long a[501];
  38. long b[501];
  39. for (int i = 0; i <= 500; ++i) { a[i] = 0; b[i] = 0; }
  40. a[0] = 1;
  41. int l = s.length();
  42. for(int i = 0; i < l; ++i){
  43. if (s[i] == '.') {
  44. b[0] = a[1];
  45. for (int j = 1; j <= count; ++j) {
  46. b[j] = (a[j+1] + a[j-1]) % 1000000;
  47. }
  48. if (count < 499) {
  49. ++count;
  50. b[count] = (a[count-1] + a[count+1]) % 1000000;
  51. }
  52. else {
  53. b[500] = a[499];
  54. }
  55. }
  56. else if (s[i] == '(') {
  57. b[0] = 0;
  58. for (int j = 1; j <= count; ++j) {
  59. b[j] = a[j-1];
  60. }
  61. if (count < 499) {
  62. ++count;
  63. b[count] = a[count-1];
  64. }
  65. else {
  66. b[500] = a[499];
  67. }
  68. }
  69. else if (s[i] == ')') {
  70. b[0] = a[1];
  71. for (int j = 1; j <= count; ++j) {
  72. b[j] = a[j+1];
  73. }
  74. b[500] = 0;
  75. }
  76. for(int j = 0; j <= 500; ++j) a[j] = b[j];
  77. }
  78. cout << a[0]<<endl;
  79. }
  80.  
  81. return 0;
  82. }
  83.  
  84.  
  85.