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