uva 1648 Business Center 简单数学

来源:互联网 发布:windows激活密匙在哪 编辑:程序博客网 时间:2024/06/09 21:51

题意:一座无限高的大楼,m座电梯,给出每个电梯一次上升和下降得层数u、d,求n次以后最少上升多少层。

挺简单的题,暂且算是数学吧,刘汝佳也是放到了紫书第十章。

用x表示上升次数,y表示下降次数,上升层数就是x*u - y * d,因为x + y = n,所以x * (u + d) - n * d,二分x找大于0的最小值就可以了。

#include <iostream>#include <cstdio>#include <cstring>using namespace std;int deal(int n, int u, int d) {    int b = 0, e = n;    int x = 0x3f3f3f3f;    while(b <= e) {        int m = (b + e) >> 1;        if(m * (u + d) - n * d > 0) {            x = m * (u + d) - n * d;            e = m - 1;        }        else b = m + 1;    }    return x;}int main() {    int n, m, u, d, i;    while(~scanf("%d%d", &n, &m)) {        int ans = 0x3f3f3f3f;        while(m--) {            scanf("%d%d", &u, &d);            int t = deal(n, u, d);            if(t < ans)                ans = t;        }        printf("%d\n", ans);    }    return 0;}


0 0
原创粉丝点击