Steps

問題

  • Steps
  • やるだけ。0割に気を付ける。

コード

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>



using namespace std;

typedef long long ll;

struct point{ll x, y;};

ll possible_steps(ll cur, ll step, ll max_pos){
  if(step == 0) return 0;
  if(step > 0){
    return (max_pos - cur) / step;
  }
  else{
    return (1 - cur) / step;
  }
}

int main(int argc, char *argv[]){
  ll n, m, xc, yc, k;
  point pos;


  cin >> n >> m >> xc >> yc >> k;
  pos.x = xc;
  pos.y = yc;

  ll ret = 0;
  for(ll i = 0; i < k; i++){
    point step;    
    cin >> step.x >> step.y;

    ll n_step;
    if(step.x == 0){
      n_step = possible_steps(pos.y, step.y, m);
    }
    else if(step.y == 0){
      n_step = possible_steps(pos.x, step.x, n);
    }
    else{
      n_step = min(possible_steps(pos.x, step.x, n),
		   possible_steps(pos.y, step.y, m));
    }

    //debug
    // cerr << pos.x << "," << pos.y << endl;
    // cerr << n_step << endl;

    pos.x += n_step * step.x;
    pos.y += n_step * step.y;
    ret += n_step;
  }

  cout << ret << endl;



  return 0;  

}