比较简单的一道题目,最底层的楼层编号为0,假设对于某个电梯而言,上升了x次,那么就肯定下降了n-x次,所以有x*u-(n-x)*d>=0,解出x=(n*d)/(u+d),注意对于nd可以整除u+d的情况要特殊考虑,因为不能停留在0层,所以只能多上u层少下d层,所以此时的编号为u+d,其他的具体实现见如下代码:
#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<stack>
#include<queue>
#include<map>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<sstream>
#include<cstdio>
#include<deque>
#include<functional>
using namespace std;
int n, m;
int main(){
while (cin >> n >> m){
int u, d;
int ans = 1 << 20;
for (int i = 1; i <= m; i++){
cin >> u >> d;
if ((n*d) % (u + d) == 0){
ans = min(ans, u + d);
}
else{
int x = (n*d) / (u + d) + 1;
int cur = x*u - (n - x)*d;
ans = min(ans, cur);
}
}
cout << ans << endl;
}
return 0;
}