Advertisement
Guest User

Untitled

a guest
Mar 28th, 2016
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define FRE(i,a,b) for(i = a; i <= b; i++)
  5. #define FRL(i,a,b) for(i = a; i < b; i++)
  6. #define mem(t, v) memset ((t) , v, sizeof(t))
  7. #define all(x) x.begin(),x.end()
  8. #define un(x) x.erase(unique(all(x)), x.end())
  9. #define sf(n) scanf("%d", &n)
  10. #define sff(a,b) scanf("%d %d", &a, &b)
  11. #define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
  12. #define sl(n) scanf("%lld", &n)
  13. #define sll(a,b) scanf("%lld %lld", &a, &b)
  14. #define slll(a,b,c) scanf("%lld %lld %lld", &a, &b, &c)
  15. #define D(x) cout<<#x " = "<<(x)<<endl
  16. #define DBG pf("Hi\n")
  17. #define pf printf
  18. #define pii pair <int, int>
  19. #define pll pair <LL, LL>
  20. #define pb push_back
  21. #define PI acos(-1.00)
  22. #define sz size()
  23. #define xx first
  24. #define yy second
  25. #define eps 1e-9
  26. #define MAX 100000
  27.  
  28. typedef long long int LL;
  29. typedef double db;
  30. char s[MAX+10];
  31. bool taken[MAX+10];
  32. int len;
  33. queue<int> q;
  34. bool check(int mid)
  35. {
  36. int f = 0;
  37. int i, cnt = 0;
  38. mem(taken,0);
  39. while(!q.empty())
  40. q.pop();
  41. for(i = 0; i<len; i++)
  42. {
  43. if(s[i] == '^')
  44. q.push(i);
  45. else
  46. {
  47. if(!q.empty())
  48. taken[q.front()] = 1, q.pop(), cnt++, taken[i] = 1;
  49. }
  50. if(cnt == mid)
  51. break;
  52. }
  53. if(cnt < mid)
  54. return 0;
  55. cnt = 0;
  56. int takeNext = 0;
  57. for(i = 0; i<len; i++)
  58. {
  59. if(s[i] == '_' && taken[i])
  60. takeNext++;
  61. else if(s[i] == '^' && !taken[i] && takeNext)
  62. cnt++, takeNext--;
  63. }
  64. return (cnt >= mid);
  65. }
  66. int main()
  67. {
  68. int i, j, k, cs, t;
  69. sf(t);
  70. FRE(cs,1,t)
  71. {
  72. scanf("%s",s);
  73. len = strlen(s);
  74. int lo = 0, hi = len, mid;
  75. while(lo < hi)
  76. {
  77. mid = (lo+hi+1)/2;
  78. if(check(mid))
  79. lo = mid;
  80. else
  81. hi = mid-1;
  82. }
  83. pf("Case %d: %d\n",cs,lo);
  84. }
  85. return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement