codeforces152b
来源:互联网 发布:ubuntu deb安装包下载 编辑:程序博客网 时间:2024/06/05 19:22
这个就是这么回事,英文不好水题也成精。很简单的题,
一开始我是一个一个模拟,后来不好,会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;}
0 0