Untitled
unknown
plain_text
2 years ago
3.4 kB
12
Indexable
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define EPS 1e-9
#define mod 1000000007
#define over 10000000000
#define sz(m) (ll)(m.size())
#define ceil(n, m) (((n) / (m)) + ((n) % (m) ? 1 : 0))
bool sortbysecdesc(pair<int, int> &a, pair<int, int> &b)
{
if (a.first == b.first)
return a.second > b.second;
else
return a.first < b.first;
}
#define fixed(n) fixed << setprecision(n)
const ll inf = 1e18 + 5;
// vector< vector <int> > nums( n , vector<int> (m)) ;
// priority_queue<int, vector<int>, greater<int> > pq ;
template <typename T = int>
istream &operator>>(istream &in, vector<T> &v)
{
for (T &i : v)
in >> i;
return in;
}
template <typename T = int>
ostream &operator<<(ostream &out, const vector<T> &v)
{
for (const T &x : v)
out << x << ' ';
return out;
}
void lol()
{
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin), freopen("outputt.txt", "w", stdout), freopen("error.txt", "w", stderr);
#endif
}
double log(double base, double x)
{
return (log(x) / log(base));
}
// count(begin(nums), end(nums), 0);
bool comp(const pair<int, int> &a, const pair<int, int> &b)
{
if (a.first > b.first)
return (a.second > b.second);
else
return (a.second < b.second);
}
ll ncr(ll n, ll r)
{
vector<ll> inv(r + 1);
ll ans = 1;
inv[0] = 1;
if (r + 1 >= 2)
inv[1] = 1;
for (int i = 2; i <= r; i++)
inv[i] = mod - (mod / i) * inv[mod % i] % mod;
// to get 1 / (r!)
for (int i = 2; i <= r; i++)
ans = ((ans % mod) * (inv[i] % mod)) % mod;
for (int i = n; i >= (n - r + 1); i--)
ans = ((ans % mod) * (i % mod)) % mod;
return ans;
}
int dx[4] = {1, 0, 0, -1};
int dy[4] = {0, 1, -1, 0};
ll fast_power(ll base, ll p)
{
if (!p)
return 1;
unsigned ll ret = fast_power(base, p / 2);
ret = (ret * ret);
if (p % 2)
ret = (ret * base);
return ret;
}
int add(ll a, ll b)
{
return (a + b) % mod;
}
///////////////////////////////////////////////////////////////////
int main()
{
lol();
int t;
cin >> t;
while (t--)
{
int r, c;
cin >> r >> c;
string s;
cin >> s;
int minr = 0, maxr = 0, minc = 0, maxc = 0;
int col = 0, row = 0, ans = 0;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == '^')
{
row++;
maxr = max(maxr, row); // max right
if (maxr - minr + 1 > r)
{
// << i << ' ' << maxr << ' ' << minr << '\n';
ans++;
row--;
maxr--;
}
}
else if (s[i] == 'v')
{
row--;
minr = min(row, minr);
if (maxr - minr + 1 > r)
{
// cout << i << '\n';
ans++;
row++;
minr++;
}
}
else if (s[i] == '<') // left
{
col--;
minc = min(minc, col);
if (maxc - minc + 1 > c)
{
// cout << i << '\n';
col++;
minc++;
ans++;
}
}
else // right
{
col++;
maxc = max(maxc, col);
if (maxc - minc + 1 > c)
{
// cout << i << '\n';
col--;
maxc--;
ans++;
}
}
}
cout << ans << '\n';
}
}
Editor is loading...