/*
AUTHOR : BELGIANBOT
*/
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include "arithmetics.h"
using namespace std;
using namespace __gnu_pbds;
template<typename T> void read(T& x) { cin >> x;}
template<typename T1, typename T2> void read(pair<T1, T2>& p) { read(p.first), read(p.second);}
template<typename T> void read(vector<T>& v) { for (auto& x : v) read(x); }
template<typename T1, typename T2> void read(T1& x, T2& y) { read(x), read(y); }
template<typename T1, typename T2, typename T3> void read(T1& x, T2& y, T3& z) { read(x), read(y), read(z); }
template<typename T1, typename T2, typename T3, typename T4> void read(T1& x, T2& y, T3& z, T4& zz) { read(x), read(y), read(z), read(zz); }
template<typename T> void print(vector<T>& v) { for (auto& x : v) cout << x << ' '; cout << endl; }
#define quit(x) return (void)(cout << x << endl)
#define pb push_back
#define fi first
#define se second
#define ordered_set tree<pair<int,int>, null_type, less<pair<int,int>>, rb_tree_tag, tree_order_statistics_node_update>
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define mp make_pair
#define sz(x) (int)(x.size())
#define YES cout<<"YES\n"
#define NO cout<<"NO\n"
#define QYES quit("YES")
#define QNO quit("NO")
#define cmin(a, b) a = min(a, b)
#define cmax(a, b) a = max(a, b)
#define int long long
#define double long double
const int inf = numeric_limits<int>::max() / 4;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int MOD = 1e9+7, LOG=20;
void solve();
signed main() {
ios::sync_with_stdio(false);
//cin.tie(0);
int t = 1;
//cin >> t;
while (t--) solve();
return 0;
}
int k, n, m, p, q, R, C, Q;
int fact[1001];
vector<vector<int>> adj;
void precompute() {
int curr = 1;
for (int i = 0; i < 1001; i++) {
fact[i] = curr;
curr *= (i+1);
curr %= MOD;
}
}
void bishop(int beg, int end) {
if ((((1 + beg)&1) ^ ((R + end)&1))) cout << "0 0\n";
else if (beg-1 == end - R || 1+beg == R+end) cout << "1 1\n";
else {
int Xright = (R + end + beg - 1) >> 1;
int Xleft = (1 + beg + end - R) >> 1;
int res = (Xleft >= 1) + (Xright <= C);
cout << "2 " << res << '\n';
}
}
void king (int beg, int end) {
int diff = abs(beg - end);
int move, poss;
move = min(C, diff) + (min(C, diff) - C);
poss = Div(fact[C], Mul(fact[C-min(C, diff)], fact[min(C, diff)]));
}
void rook(int beg, int end) {
if (beg == end) cout << "1 1\n";
else cout << "2 2\n";
}
void pawn(int beg, int end) {
if (beg != end) cout << "0 0\n";
else cout << R << "1\n";
}
void solve() {
cin >> R >> C >> Q;
precompute();
while (Q--) {
char piece; int beg, end;
cin >> piece >> beg >> end;
if (piece == 'P') pawn(beg, end);
else if (piece == 'R') rook(beg, end);
else if (piece == 'B') bishop(beg, end);
else if (piece == 'K') king(beg, end);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |