[关闭]
@PaulGuan 2016-10-18T17:06:04.000000Z 字数 519 阅读 679

O - Steps 题解

算法 题解


题目大意

一个人在一个n*m的空间的某一点上,向着一个向量的方向前进,每次都走最大可能的步数,问最终能走多少步?

分析

模拟这个人走路,找到每次走路的最大的步数,然后累加即可。

代码

  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. #include <vector>
  5. #define oo 999999999
  6. using namespace std;
  7. int main(void)
  8. {
  9. long long n,m,xc,yc,k;
  10. unsigned long long ans=0;
  11. cin>>n>>m>>xc>>yc>>k;
  12. for(int i=0;i<k;i++)
  13. {
  14. long long xd,yd;
  15. cin>>xd>>yd;
  16. long long x,y;
  17. if(!xd)
  18. x=oo;
  19. else if(xd>0)
  20. x=(n-xc)/xd;
  21. else
  22. x=(xc-1)/(-xd);
  23. if(!yd)
  24. y=oo;
  25. else if(yd>0)
  26. y=(m-yc)/yd;
  27. else
  28. y=(yc-1)/(-yd);
  29. long long t=x>y?y:x;
  30. xc+=xd*t;
  31. yc+=yd*t;
  32. ans+=t;
  33. }
  34. cout<<ans<<endl;
  35. return 0;
  36. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注