#55134: 暴力簡單解


hungchia.c.1217@gmail.com (AC)


#include <bits/stdc++.h>
using namespace std;

int64_t M,N,k,r,c;

int main() 
{
  
  cin>>M>>N>>k>>r>>c;
  int mp[M][N];
  for (int i=0; i<M; i++) {
    for (int j=0; j<N; j++) {
      cin>>mp[i][j];
    }
  }
  int64_t score=mp[r][c],jewel=1,way=1;
  mp[r][c]--;
  //cout<<"Start(r,c):"<<r<<','<<c<<endl;
  for (int i=0;;i++) {
    if (way==1) {
      if (c+1>=N) {
        way=2;
      }
      else if (mp[r][c+1]==0) {
        cout<<jewel;
        return 0;
      }
      else if (mp[r][c+1]==-1) {
        way=2;
      }

      else {
        score+=mp[r][c+1];
        jewel++;
        if (score%k==0) {
          way=2;
        }
        mp[r][c+1]--;
        c++;
      }
    }
    else if (way==2) {
      if (r+1>=M) {
        way=3;
      }
      else if (mp[r+1][c]==0) {
        cout<<jewel;
        return 0;
      }
      else if (mp[r+1][c]==-1) {
        way=3;
      }

      else {
        score+=mp[r+1][c];
        jewel++;
        if (score%k==0) {
          way=3;
        }
        mp[r+1][c]--;
        r++;
      }
    }
    else if (way==3) {
      if (c==0) {
        way=4;
      }
      else if (mp[r][c-1]==0) {
        cout<<jewel;
        return 0;
      }
      else if (mp[r][c-1]==-1) {
        way=4;
      }

      else {
        score+=mp[r][c-1];
        jewel++;
        if (score%k==0) {
          way=4;
        }
        mp[r][c-1]--;
        c--;
      }
    }
    else if (way==4) {
      if (r==0) {
        way=1;
      }
      else if (mp[r-1][c]==0) {
        cout<<jewel;
        return 0;
      }
      else if (mp[r-1][c]==-1) {
        way=1;
      }
      else {
        score+=mp[r-1][c];
        jewel++;
        if (score%k==0) {
          way=1;
        }
        mp[r-1][c]--;
        r--;
      }
    }
    //cout<<"current(r,c):"<<r<<','<<c<<" Way:"<<way<<endl;
    //cout<<"score:"<<score<<','<<"jewel:"<<jewel<<endl;
  }
    return 0;
}
score:目前分數 way:方向 mp:地圖 jewel:寶石持有量