题意:

      题意最蛋疼,其实是水题,这个题意整的我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\n" ,ans[i]);
if(
tt) printf("\n");
}
return
0;
}

hdu1146的更多相关文章

  1. Ferry Loading III[HDU1146]

    Ferry Loading IIITime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...

随机推荐

  1. pytorch(01)环境配置及安装

    pytorch pytorch定位:深度学习框架 人工智能:多领域交叉科学技术 机器学习:计算机智能决策算法 深度学习:高效的机器学习算法 pytorch实现模型训练需要5个模块 数据 将数据从硬盘读 ...

  2. SpringMVC-01 什么是SpringMVC

    SpringMVC-01 什么是SpringMVC 回顾MVC 1.什么是MVC MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范. 是将业务逻辑 ...

  3. 【深入理解Java虚拟机】垃圾回收

    引用计数算法 给对象加一个计数器,引用一次+1,引用时效就-1,当计数器=0时对象就不能再被使用: 实现简单,判定效率高:Java虚拟接没有使用,主要原因是很难解决对象之间循环引用问题: GC算法: ...

  4. Kubernetes 实战 —— 02. 开始使用 Kubernetes 和 Docker

    创建.运行及共享容器镜像 P23 运行容器 P24 运行 P24 可以运行 Docker 客户端可执行文件来执行各种 Docker 命令.例如:可以试着从 Docker Hub 的公共镜像仓库拉取.运 ...

  5. SpringBoot自动配置原理源码级别分析

    SpringBoot自动配置原理 前言 后面还会讲到SpringBoot自动配置原理,会主要讲解@EnableAutoConfiguratuon注解帮助我们做了什么事情,是如何自动把自动配置类扫描到容 ...

  6. 【odoo14】第十四章、CMS网站开发

    第十四章.CMS网站开发** Odoo有一个功能齐全的内容管理系统(CMS).通过拖放功能,你的最终用户可以在几分钟内设计一个页面,但是在Odoo CMS中开发一个新功能或构建块就不是那么简单了.在本 ...

  7. Hdfs block数据块大小的设置规则

    1.概述 hadoop集群中文件的存储都是以块的形式存储在hdfs中. 2.默认值 从2.7.3版本开始block size的默认大小为128M,之前版本的默认值是64M. 3.如何修改block块的 ...

  8. elf.h

    1 /* This file defines standard ELF types, structures, and macros. 2 Copyright (C) 1995-2019 Free So ...

  9. K8S 本地 配置 Local PV 实践

    上面我们创建了后端是 hostPath 类型的 PV 资源对象,我们也提到了,使用 hostPath 有一个局限性就是,我们的 Pod 不能随便漂移,需要固定到一个节点上,因为一旦漂移到其他节点上去了 ...

  10. Jmeter(四十二) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 -番外篇(详解教程)

    1.简介 为什么宏哥要对Jmeter的配置文件进行一下讲解了,因为有的童鞋或者小伙伴在测试中遇到一些需要修改配置文件的问题不是很清楚也不是很懂,就算修改了也是模模糊糊的.更有甚者觉得那是禁地神圣不可轻 ...