Submission #28025623
Source Code Expand
#include <bits/stdc++.h>
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define rep2(i,k,n) for (int i = (k); i < (n); ++i)
using namespace std;
using ll = long long;
using P = pair<int,int>;
// using P = pair<ll,ll>;
const ll INF = (ll)1e18;
// const int INF = (int)1e9+7;
template<typename T>
void chmin(T &a, T b) { a = min(a, b); }
template<typename T>
void chmax(T &a, T b) { a = max(a, b); }
// const int mod = 1000000007;
const int mod = 998244353;
struct mint {
ll x; // typedef long long ll;
mint(ll x=0):x((x%mod+mod)%mod){}
mint operator-() const { return mint(-x);}
mint& operator+=(const mint a) {
if ((x += a.x) >= mod) x -= mod;
return *this;
}
mint& operator-=(const mint a) {
if ((x += mod-a.x) >= mod) x -= mod;
return *this;
}
mint& operator*=(const mint a) { (x *= a.x) %= mod; return *this;}
mint operator+(const mint a) const { return mint(*this) += a;}
mint operator-(const mint a) const { return mint(*this) -= a;}
mint operator*(const mint a) const { return mint(*this) *= a;}
mint pow(ll t) const {
if (!t) return 1;
mint a = pow(t>>1);
a *= a;
if (t&1) a *= *this;
return a;
}
// for prime mod
mint inv() const { return pow(mod-2);}
mint& operator/=(const mint a) { return *this *= a.inv();}
mint operator/(const mint a) const { return mint(*this) /= a;}
};
istream& operator>>(istream& is, mint& a) { return is >> a.x;}
ostream& operator<<(ostream& os, const mint& a) { return os << a.x;}
void solve() {
mint H, W;
int K;
cin >> H >> W >> K;
ll x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
vector<vector<mint>> dp(2, vector<mint>(2, 0));
dp[x1==x2][y1==y2] = 1;
while (K--) {
vector<vector<mint>> nx(2, vector<mint>(2,0));
nx[0][0] = (W-1)*dp[0][1] + (H-1)*dp[1][0] + (H+W-4)*dp[0][0];
nx[0][1] = dp[0][0] + (H-2)*dp[0][1] + (H-1)*dp[1][1];
nx[1][0] = dp[0][0] + (W-2)*dp[1][0] + (W-1)*dp[1][1];
nx[1][1] = dp[0][1] + dp[1][0];
swap(dp, nx);
}
cout << dp[1][1] << endl;
}
int main() {
solve();
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | E - Rook Path |
| User | goropikari |
| Language | C++ (GCC 9.2.1) |
| Score | 500 |
| Code Size | 2264 Byte |
| Status | AC |
| Exec Time | 78 ms |
| Memory | 3564 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 500 / 500 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | example_00.txt, example_01.txt, example_02.txt |
| All | example_00.txt, example_01.txt, example_02.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| example_00.txt | AC | 4 ms | 3468 KiB |
| example_01.txt | AC | 75 ms | 3548 KiB |
| example_02.txt | AC | 2 ms | 3508 KiB |
| test_00.txt | AC | 78 ms | 3400 KiB |
| test_01.txt | AC | 72 ms | 3492 KiB |
| test_02.txt | AC | 15 ms | 3396 KiB |
| test_03.txt | AC | 31 ms | 3396 KiB |
| test_04.txt | AC | 12 ms | 3388 KiB |
| test_05.txt | AC | 67 ms | 3552 KiB |
| test_06.txt | AC | 20 ms | 3464 KiB |
| test_07.txt | AC | 30 ms | 3400 KiB |
| test_08.txt | AC | 49 ms | 3564 KiB |
| test_09.txt | AC | 53 ms | 3404 KiB |
| test_10.txt | AC | 55 ms | 3548 KiB |
| test_11.txt | AC | 44 ms | 3496 KiB |
| test_12.txt | AC | 7 ms | 3468 KiB |
| test_13.txt | AC | 35 ms | 3492 KiB |
| test_14.txt | AC | 43 ms | 3496 KiB |
| test_15.txt | AC | 40 ms | 3488 KiB |
| test_16.txt | AC | 51 ms | 3504 KiB |
| test_17.txt | AC | 44 ms | 3452 KiB |
| test_18.txt | AC | 52 ms | 3548 KiB |
| test_19.txt | AC | 59 ms | 3496 KiB |
| test_20.txt | AC | 23 ms | 3400 KiB |
| test_21.txt | AC | 59 ms | 3456 KiB |
| test_22.txt | AC | 54 ms | 3564 KiB |