zoukankan      html  css  js  c++  java
  • UVa 1648 (推公式) Business Center

    题意:

    有一种奇怪的电梯,每次只能向上走u个楼层或者向下走d个楼层

    现在有m个这种电梯,求恰好n次能够到达的最小楼层数(必须是正数),最开始默认位于第0层。

    分析:

    假设电梯向上走x次,则向下走n-x次,则所到达的楼层为xu - (n-x)d ≥ 0

    (u+d)x ≥ nd,x的最小值为

    换句话说,如果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
    ", ans);
    23     }
    24 
    25     return 0;
    26 }
    代码君
  • 相关阅读:
    第二阶段冲刺7
    第二阶段冲刺6
    课后作业02需求分析
    阅读计划
    个人总结
    第十六周学习进度条
    第十五周学习进度条
    《梦断代码》阅读笔记03
    《梦断代码》阅读笔记02
    《梦断代码》阅读笔记01
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4299114.html
Copyright © 2011-2022 走看看