Submission #28021143


Source Code Expand

//g++ 1.cpp -std=c++14 -O2 -I .
#include <bits/stdc++.h>
using namespace std;

#include <atcoder/all>
using namespace atcoder;

using ll = long long;
using ld = long double;

using vi = vector<int>;
using vvi = vector<vi>;
using vll = vector<ll>;
using vvll = vector<vll>;
using vld = vector<ld>;
using vvld = vector<vld>;

#define fi first
#define se second
#define pb push_back
#define pq_big(T) priority_queue<T,vector<T>,less<T>>
#define pq_small(T) priority_queue<T,vector<T>,greater<T>>
#define all(a) a.begin(),a.end()
#define rep(i,start,end) for(ll i=start;i<(ll)(end);i++)
#define per(i,start,end) for(ll i=start;i>=(ll)(end);i--)
#define uniq(a) sort(all(a));a.erase(unique(all(a)),a.end())

const int MAX=1510000;
const long long MOD=998244353;

long long fac[MAX],finv[MAX],inv[MAX];

void COMinit(){
  fac[0]=fac[1]=1;
  finv[0]=finv[1]=1;
  inv[1]=1;
  for(int i=2;i<MAX;i++){
    fac[i]=fac[i-1]*i%MOD;
    inv[i]=MOD-inv[MOD%i]*(MOD/i)%MOD;
    finv[i]=finv[i-1]*inv[i]%MOD;
  }
}

long long COM(int n,int k){
  if(n<k) return 0;
  if(n<0||k<0) return 0;
  return fac[n]*(finv[k]*finv[n-k]%MOD)%MOD;
}

using mint = modint998244353;

mint dp_h[1000000+10][2]={};
mint dp_w[1000000+10][2]={};

int main(){
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  COMinit();

  int h,w,k;
  cin>>h>>w>>k;

  h%=MOD;
  w%=MOD;

  //i回移動j=0 -> 同じとこ j=1 -> 違うとこ

  dp_h[0][0]=1;dp_h[0][1]=0;dp_h[1][0]=0;dp_h[1][1]=1;
  dp_w[0][0]=1;dp_w[0][1]=0;dp_w[1][0]=0;dp_w[1][1]=1;

  rep(i,2,k+10){
    /*
    dp_h[i][0] 1から1
    dp_h[i][1] 1から2 
    */
    dp_h[i][0]=dp_h[i-1][1]*(h-1);
    dp_h[i][1]=dp_h[i-1][0]+dp_h[i-1][1]*(h-2);

    dp_w[i][0]=dp_w[i-1][1]*(w-1);
    dp_w[i][1]=dp_w[i-1][0]+dp_w[i-1][1]*(w-2);
  }

  int x1,y1,x2,y2;
  cin>>x1>>y1>>x2>>y2;

  mint ans=0;

  rep(i,0,k+1){
    mint nw=1;
    if(x1==x2){
      nw*=dp_h[i][0];
    }
    else{
      nw*=dp_h[i][1];
    }
    if(y1==y2){
      nw*=dp_w[k-i][0];
    }
    else{
      nw*=dp_w[k-i][1];
    }

    nw*=COM(k,i);

    ans+=nw;
  }

  cout<<ans.val()<<endl;
}

Submission Info

Submission Time
Task E - Rook Path
User Mitsubachi
Language C++ (GCC 9.2.1)
Score 500
Code Size 2187 Byte
Status AC
Exec Time 104 ms
Memory 54680 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 3
AC × 26
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 95 ms 54608 KiB
example_01.txt AC 104 ms 54672 KiB
example_02.txt AC 89 ms 54516 KiB
test_00.txt AC 98 ms 54540 KiB
test_01.txt AC 101 ms 54516 KiB
test_02.txt AC 91 ms 54580 KiB
test_03.txt AC 87 ms 54548 KiB
test_04.txt AC 89 ms 54644 KiB
test_05.txt AC 98 ms 54572 KiB
test_06.txt AC 87 ms 54624 KiB
test_07.txt AC 88 ms 54548 KiB
test_08.txt AC 96 ms 54676 KiB
test_09.txt AC 93 ms 54536 KiB
test_10.txt AC 97 ms 54628 KiB
test_11.txt AC 98 ms 54516 KiB
test_12.txt AC 85 ms 54624 KiB
test_13.txt AC 91 ms 54612 KiB
test_14.txt AC 94 ms 54620 KiB
test_15.txt AC 91 ms 54620 KiB
test_16.txt AC 95 ms 54624 KiB
test_17.txt AC 91 ms 54676 KiB
test_18.txt AC 89 ms 54680 KiB
test_19.txt AC 96 ms 54676 KiB
test_20.txt AC 89 ms 54540 KiB
test_21.txt AC 95 ms 54576 KiB
test_22.txt AC 93 ms 54544 KiB