fork download
  1. #include <bits/stdc++.h>
  2. #ifndef ONLINE_JUDGE
  3. #include "debug.h"
  4. #else
  5. #define debug(...)
  6. #endif
  7. #define int long long
  8. #define oo LLONG_MAX >> 2
  9. #define all(x) x.begin(), x.end()
  10. #define allr(x) x.rbegin(), x.rend()
  11. #define pep_Guardiola \
  12.   ios::sync_with_stdio(0); \
  13.   cin.tie(0); \
  14.   cout.tie(0);
  15. using namespace std;
  16.  
  17. void io()
  18. {
  19. #ifndef ONLINE_JUDGE
  20. freopen("input.txt", "r", stdin);
  21. // freopen("output.txt", "w", stdout);
  22. #endif
  23. }
  24.  
  25. int skip(int m, int st, const vector<int>&moves){
  26. int pos = st, skips = 0;
  27. for(auto x : moves){
  28. if(pos+m > m || pos+m < 1) skips++;
  29. else pos=pos+m;
  30. }
  31. return skips;
  32. }
  33.  
  34. int ternary(int m, const vector<int>&moves){
  35. if(moves.empty()) return 0;
  36. int l = 1, r = m;
  37. while(r-l > 2){
  38. int mid1 = l + (r-l)/3;
  39. int mid2 = r - (r-l)/3;
  40. int f1 = skip(m, mid1, moves);
  41. int f2 = skip(m, mid2, moves);
  42. if(f1 < f2) r = mid2;
  43. else if(f1 > f2) l = mid1;
  44. else l = mid1, r = mid2;
  45. }
  46. int mn = skip(m, l, moves);
  47. for(int i = l+1; i <= r; i++){
  48. mn = min(mn, skip(mn, i, moves));
  49. }
  50. return mn;
  51. }
  52.  
  53. void Guardiola()
  54. {
  55. int r, c; string s;
  56. cin >> r >> c >> s;
  57. vector<int> v, h;
  58. for(int i = 0; i < s.length(); i++){
  59. if(s[i] == '>') v.push_back(1);
  60. if (s[i] == '<') v.push_back(-1);
  61. if(s[i] == 'v') v.push_back(1);
  62. if(s[i] == '^') h.push_back(-1);
  63. }
  64. int mn1 = ternary(r, v);
  65. int mn2 = ternary(c, h);
  66. cout << mn1+ mn2 << endl;
  67. }
  68.  
  69. signed main()
  70. {
  71. pep_Guardiola;
  72. io();
  73. int t = 1;
  74. cin >> t;
  75. while (t--)
  76. Guardiola();
  77. return 0;
  78. }
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
0