UVa 1648 (推公式) Business Center
题意:
有一种奇怪的电梯,每次只能向上走u个楼层或者向下走d个楼层
现在有m个这种电梯,求恰好n次能够到达的最小楼层数(必须是正数),最开始默认位于第0层。
分析:
假设电梯向上走x次,则向下走n-x次,则所到达的楼层为xu - (n-x)d ≥ 0
换句话说,如果nd % (u+d) == 0, x = nd / (u+d)
否则 x = nd / (u+d) + 1
考虑到不能停到0楼的条件:当nd % (u+d) == 0会出现这种情况,所以只能多上一次u个楼层,少下一次d个楼层,所以这样最终会停在u+d层
1 #include <cstdio> 2 3 int main() 4 { 5 int n, m; 6 7 while(scanf("%d%d", &n, &m) == 2) 8 { 9 int ans = 1000000000; 10 while(m--) 11 { 12 int u, d; 13 scanf("%d%d", &u, &d); 14 if((n*d) % (u+d) == 0) { if(u+d < ans) ans = u+d; } 15 else 16 { 17 int x = (n*d) / (u+d) + 1; 18 int t = x*(u+d)-n*d; 19 if(t < ans) ans = t; 20 } 21 } 22 printf("%d\n", ans); 23 } 24 25 return 0; 26 }