zoukankan      html  css  js  c++  java
  • hdu 4505 小Q系列故事——电梯里的爱情 解题报告

       题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4505

       思路:开门次数的时间是跟要去的楼层数中总共有多少个不同的数有关;  每下一人的总时间跟

    乘坐电梯的总人数有关;  最后问题出现了,向上运行或向下运行的时间我是根据:由于电梯最开始在0层,那么第一个人要去的楼层肯定是上去的,所以是 第一个人要去的楼层 × 6,中间那些人,就要判断是向上还是向下才能得出结果,最后一个人去完要去的楼层后,势必要回到0层,所以最后的时间还要加上  最后那个人要去的楼层 × 4。  

        wa代码

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int a[20], i, j, k, c, n, time;
     7     while (cin >> c)
     8     {
     9         while (c--)
    10         {
    11             scanf("%d", &n);
    12             time = n;
    13             for (i = 0; i < n; i++)
    14                 scanf("%d", &a[i]);    
    15             for (i = 0; i < n; i++)
    16             {
    17                 for (j = i+1; j < n; j++)
    18                 {
    19                     if (a[i] == a[j])     //在数组里删掉相同的数,剩下来的n表示总共要开多少次门
    20                     {
    21                         for (k = j; k < n-1; k++)
    22                             a[k] = a[k+1];
    23                         n--;
    24                         j--;      //必须的,因为有可能删除之后,下一个数又跟a[i]相同
    25                     }    
    26                 }
    27             }
    28             time += n * 5;
    29             time += a[0] * 6;      //从这里开始就是问题代码了
    30 for (i = 0; i < n-1; i++) 31 { 32 if (a[i+1] > a[i]) 33 time += (a[i+1] - a[i]) * 6; 34 else 35 time += (a[i] - a[i+1]) * 4; 36 } 37 time += (a[n-1] * 4);
    38 printf("%d\n", time); 39 } 40 } 41 return 0; 42 }

       一开始以为没有处理:如果那些人要去0层的话,那么时间应该是0,可是结果是6,所以加了一个特判,还是wa。(其实是不用的吧,因为题目说了都是正整数,0不是正整数)。看了discuss后,原来直接算出楼层最大值再乘以10即可,因为电梯最高能到达楼层最大值,接着要从楼层最大值下来,不管中间如何兜转,最终乘以10即可以算出向上运行或向下运行的总时间。

       终于知道为什么会wa了,万分感激“纯快乐”这位大神,不厌其烦地指出了我的错误。举个例子吧,比如说:5    4   2  5   3   6,从0——> 4层的时候,要先把去第2层的和去第3层的人放了,然后电梯再上去第5层,接着第6层,最后从第6层直接下到第0层。wa的代码里会有重叠的部分!!!wa的运行结果是130,而ac的运行结果是90。总的来说,电梯不会走回头路!!!

       ac代码:

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int a[20], i, j, c, n, time, count;
     8     while (cin >> c)
     9     {
    10         while (c--)
    11         {
    12             scanf("%d", &n);
    13             time = n;
    14             for (i = 0; i < n; i++)
    15                 scanf("%d", &a[i]);
    16             sort(a, a+n);
    17             time += a[n-1] * 10;
    18             count = 1;
    19             for (i = 0; i < n-1; i++)
    20             {
    21                 j = i+1;
    22                 if (a[i] != a[j])
    23                     count++;         
    24             }
    25             time += count * 5;    
    26             printf("%d\n", time);
    27         }    
    28     }
    29     return 0;
    30 }

      

         

  • 相关阅读:
    ztree——Cannot read property 'init' of undefined解决方案
    vue——手写swiper子组件,pagination不显示、轮播无效问题解决
    angularJS——数据更新了但是view(视图)层却未更新问题及解决方法
    vue——router.js动态注册组件
    js——ev || window.event,event.srcElement || event.target
    vue——keepAlive第一次无效问题及解决方法
    vue——列表页进详情页,第一次很慢,第二次就很快问题及解决方法
    vue——按需引入elementUI(以时间选择器为例)
    vue——预先指定高度,进行懒加载
    sql 分页查询
  • 原文地址:https://www.cnblogs.com/windysai/p/3085128.html
Copyright © 2011-2022 走看看