题意:

      题意最蛋疼,其实是水题,这个题意整的我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. ElasticSearch 数据建模

    公号:码农充电站pro 主页:https://codeshellme.github.io 通常在使用 ES 构建数据模型时,需要考虑以下几点: 字段类型 是否需要搜索与分词 是否需要聚合与排序 是否需 ...

  2. ElasticSearch学习笔记(超详细)

    文章目录 初识ElasticSearch 什么是ElasticSearch ElasticSearch特点 ElasticSearch用途 ElasticSearch底层实现 ElasticSearc ...

  3. POJ-3268(来回最短路+dijkstra算法)

    Silver Cow Party POJ-3268 这题也是最短路的模板题,只不过需要进行两次求解最短路,因为涉及到来回的最短路之和. 该题的求解关键是:求解B-A的最短路时,可以看做A是起点,这就和 ...

  4. POJ-1797(最短路变形-dijkstra)

    Heavy Transportation POJ-1797 这题是最短路题型的变形,该题不是求起点到终点的最短路,而是求路径中的最小边的最大值. 这题的求解思路是:将原来dijkstra中的松弛方程改 ...

  5. 01_AlexNet

    torch.topk 功能:找出前k大的数据,及其索引号 input:张量 k:决定选取k个值,k=1是为top-1 dim:索引维度 返回: Tensor:前k大的值 LongTensor:前k大的 ...

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

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

  7. 2020年12月-第02阶段-前端基础-CSS Day07

    CSS Day07 CSS高级技巧 理解 能说出元素显示隐藏最常见的写法 能说出精灵图产生的目的 能说出去除图片底侧空白缝隙的方法 应用 能写出最常见的鼠标样式 能使用精灵图技术 能用滑动门做导航栏案 ...

  8. 翻译:《实用的Python编程》03_06_Design_discussion

    目录 | 上一节 (3.5 主模块) | 下一节 (4 类) 3.6 设计讨论 本节,我们重新考虑之前所做的设计决策. 文件名与可迭代对象 考虑以下两个返回相同输出的程序. # Provide a f ...

  9. 浅谈.Net Core后端单元测试

    目录 1. 前言 2. 为什么需要单元测试 2.1 防止回归 2.2 减少代码耦合 3. 基本原则和规范 3.1 3A原则 3.2 尽量避免直接测试私有方法 3.3 重构原则 3.4 避免多个断言 3 ...

  10. 关于go中并发的初步理解

    1.一些概念的介绍: 概念 描述 进程 在内存中的程序.有自己独立的独占的虚拟 CPU .虚拟的 Memory.虚拟的 IO devices. (1) 每一进程占用独立的地址空间. 此处的地址空间包括 ...