• hdu1146


    题意:
          题意最蛋疼,其实是水题,这个题意整的我wa了一个多小时,我就改改题意吧..有一条河,刚开始的时候在左岸有一条船,这条船最多能运n个货物,一趟的时间是t,有m个货物,每个货物有自己到达岸边的时间,你的任务就是输出所有货物到达对岸的那一刻的时间..只有当两岸有人船就会动,否则不会动..

    思路:

         水模拟,这个题目别想多了,我们把自己当成是开船的就能知道怎么敲了,首先我们把左岸的存在一个数组里,右岸的存在一个数组里,循环的条件是(l <= n_l || r <= n_r),就是只要有人就循环,想想如果我们是开船人,每一步我们肯定是 那个岸的人来的早我们就开往哪个岸了,当时有一点要注意,就是假如当前我们在左岸,而右岸的那个比左岸早,那么我们肯定是要去右岸的,而我们什么间才能到右岸呢? 是右岸 node[r]? 还是 node[r] + t ?,其实都不是,而是time =  maxx(now_time + t ,node[r] + t);因为最快的时间是 node[r] + t,因为你是看见后才过去的,但是如果那个人是在你干活的时候来的,那么node[r] + t的时候你肯定赶不过去,所以取大的,还有就是虽然已经决定去右岸了,到达右岸的时间是上面的那个time,但我们如果在去之前,也就是time - t之前能在左岸拉几个货物我们肯定是拉着啊,反正题目说了,装卸货物时间0,那么不正白不正啊,所以把左岸能捡的就拉了就行了..就这样遍历到最后就行了.还有就是出题的那个货行不行了,题意说的神我本来就够蛋疼的了,测试数据之间输出换行能不能说下啊,整的老子各种wa之后又pe了一次..上面是个人见解,有错误望大牛支出..


    #include<stdio.h>
    #include<string.h>
    
    #define N 10000 + 50
    
    
    int node_l[N] ,node_r[N];
    int id_l[N] ,id_r[N];
    int ans[N];
    int n_l ,n_r;
    
    int maxx(int x ,int y)
    {
       return x > y ? x : y;
    }
    
    int main ()
    {
       int n ,y ,m ,tt ,t;
       int i ,j ,time;
       char str[10];
       scanf("%d" ,&tt);
       while(tt--)
       {
          scanf("%d %d %d" ,&n ,&t ,&m);
          n_l = n_r = 0;
          for(i = 1 ;i <= m; i ++)
          {
             scanf("%d %s" ,&time ,str);
             if(str[0] == 'l')  
             {
                node_l[++n_l] = time;
                id_l[n_l] = i;
             }
             else 
             {
                node_r[++n_r] = time;
                id_r[n_r] = i;
             }
          }
          int now_fx = 1 ,now_time = 0;
          int l = 1 ,r = 1;
          while(l <= n_l || r <=  n_r)
          { 
             if(l <= n_l && node_l[l] < node_r[r] || r > n_r)
             {
                
                if(now_fx != 1) now_time = maxx(now_time + t,node_l[l] + t);
                else now_time = maxx(now_time ,node_l[l]);
                
                
                if(now_fx != 1)
                {
                    for(i = 1 ;i <= n && r <= n_r;i ++)
                   {
                      if(node_r[r] <= now_time - t)
                      {
                        ans[id_r[r++]] =now_time;
                      }
                      else break;
                   }
                }  
                   
                           
                for(i = 1 ;i <= n && l <= n_l ;i ++)
                {
                   if(node_l[l] <= now_time)
                   {
                      ans[id_l[l++]] =now_time + t; 
                   }
                   else break;
                }
                now_fx = 2;
                now_time += t;
             }
             else
             {
                if(now_fx != 2) now_time = maxx(now_time + t,node_r[r] + t);
                else now_time = maxx(now_time ,node_r[r]);
                
                if(now_fx != 2)
                {
                    for(i = 1 ;i <= n && l <= n_l;i ++)
                   {
                      if(node_l[l] <= now_time - t)
                      {
                        ans[id_l[l++]] =now_time;
                      }
                      else break;
                   }
                }  
                
                for(i = 1 ;i <= n && r <= n_r;i ++)
                {
                   if(node_r[r] <= now_time)
                   {
                     ans[id_r[r++]] =now_time + t;
                   }
                   else break;
                }
                now_fx = 1;
                now_time += t;
             }
          }
          for(i = 1 ;i <= m ;i ++)
          printf("%d
    " ,ans[i]);
          if(tt) printf("
    ");
       }
       return 0;
    }
                
             
    

  • 相关阅读:
    敏捷开发设计模式的五大原则(读敏捷软件开发:原则、模式与实践笔记记录一下)
    使用AOP和Semaphore对项目中具体的某一个接口进行限流
    java正则使用全记录!
    推荐一本书学习springcloud书籍的SpringCloud微服务全栈技术与案例解析
    使用springboot Admin 2.0.6版本 集成监控springcloud微服务应用
    推荐一本学习Groovy的书籍Groovy程序设计!
    Datagrip 快捷键和常用插件持续更新一集一些使用技巧
    Eclipse中项目不会自动编译问题的坑和注意点
    使用Groovy的mixin方法注入,和mixedIn属性实现过滤链
    vscode常用快捷键和插件(持续更新),以及一些常用设置的坑和技巧
  • 原文地址:https://www.cnblogs.com/csnd/p/12063218.html
Copyright © 2020-2023  润新知