这个就是这么回事,英文不好水题也成精。很简单的题,
一开始我是一个一个模拟,后来不好,会t,然后我发现这么回事,其实可以/的,我还是懒,一开始就该想到除的,然后小心longlong
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MaxN = 1e4 + 10;
const int INF = 0x3f3f3f3f;
typedef long long LL;
int dx[MaxN] , dy[MaxN];
int main()
{
LL n , m , x , y , k;
scanf("%I64d %I64d", &n , &m);
scanf("%I64d %I64d", &x , &y);//printf("***x = %Id , y = %d",x ,y);
scanf("%I64d",&k);
for(int i = 0 ; i < k ; i++){
scanf("%I64d %I64d",&dx[i] , &dy[i]);
}
int a , b;
LL ans = 0;
for(int i = 0 ; i < k ; i++){
if(dx[i] == 0) a = INF;
if(dy[i] == 0) b = INF;
if(dx[i] < 0){
a = (1 - x)/dx[i];
}
else if(dx[i] > 0){
a = (n - x)/dx[i];
}
if(dy[i] < 0){
b = (1 - y)/dy[i];
}
else if(dy[i] > 0){
b = (m - y)/dy[i];
}
a = min(a,b);
//printf("***a = %I64d x = %I64d y = %I64d\n",a,x , y);
x += dx[i]*a;
y += dy[i]*a;
ans += a;
//printf("a = %d x = %I64d y = %d\n",a,x , y);
}
printf("%I64d\n",ans);
return 0;
}