题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=1050

题意

有一条走廊,走廊两边各有200个房间,一边的房间编号是奇数,另一边是偶数。现在有n个箱子需要从一个房间移动到另一个房间,移动一个箱子需要10分钟,箱子可以同时移动,但某一段走廊每次只能移动1个箱子,比如(1,3)和(6,8)可以同时移动,而(1,5)和(6,8)不能同时移动,求最少需要多少时间可以把箱子移动完毕。

思路

先将箱子按开始的房间号由小到大排序,然后循环遍历,在遍历的过程中不断去除可以同时移动的箱子(表示箱子已移动完毕),记录循环的次数,直到所有的箱子均已移动完毕。循环次数*10即是答案。由于这是区间相交问题,所以要将所有的房间号映射到一维坐标系中,根据题目中的图可知,对于房间号为k的房间来说(k为偶数),房间k和房间k-1是相对的,也就是偶数k和k-1在坐标轴上对应的是同一位置,所以要将所有编号为偶数k的房间的编号转化成k-1.

代码

 #include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std; struct Node
{
int s, e;
bool visit; //记录箱子是否已经移动完毕,值为true则移动完毕 Node(int s, int e) :s(s), e(e), visit(false) {}
bool operator < (const Node& node)const
{
return s < node.s; //将房间按开始房间号从小到大排序
}
}; int main()
{
//freopen("hdoj1050.txt", "r", stdin);
vector<Node> v;
int m, n;
cin >> m;
while (m--)
{
cin >> n;
v.clear();
int s, e;
for (int i = ; i<n; i++)
{
cin >> s >> e;
if (s > e) //注意输入的开始房间号可能大于结束房间号
swap(s, e);
if (s % == ) //房间号为偶数的,要变成该偶数的前一个奇数
s--;
if (e % == )
e--;
v.push_back(Node(s, e));
} sort(v.begin(), v.end());
int ans = ; //记录循环的次数
int cnt = ; //记录已经移动完毕的箱子的个数
int cur = ; //当前从第cur个箱子开始遍历
int t;
while (cnt != n)
{
for (int i = ; i<n; i++)
{
if (!v[i].visit)
{
cur = i;
t = v[i].e;
v[i].visit = true;
cnt++;
break;
}
}
for (int i = cur+; i<n; i++)
{
if (!v[i].visit && v[i].s > t)
{
cnt++;
t = v[i].e;
v[i].visit = true;
}
}
ans++;
}
cout << ans * << endl;
}
return ;
}

注意点

1、要按开始房间号从小到大排序,而不是结束房间号。手动运行下面的数据有助于理解:


2、输入的开始房间号可能大于结束房间号,此时要将两者交换;

3、对于编号为偶数k的房间,需将其编号转为奇数k-1

测试数据

输入:


输出:


hdoj1050 Moving Tables(贪心)的更多相关文章

  1. Moving Tables(贪心或Dp POJ1083)

    Moving Tables Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28304   Accepted: 9446 De ...

  2. zstu.2512. Moving Tables(贪心)

     Moving Tables Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 1182  Solved: 563 Description The famo ...

  3. HDU1050(Moving Tables:贪心算法)

    解题思路: 这种做法是基于hdu2037的做法上考虑的,找出所有可以同时搬运的桌子,然后就很方便求出最短总时间. 还有一种更简单的做法是直接遍历一遍找出与别的重复次数最多的那片区域,重复次数*10就可 ...

  4. hdu_1050 Moving Tables 贪心

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  5. UVAlive 2326 Moving Tables(贪心 + 区间问题)

    The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in ...

  6. --hdu 1050 Moving Tables(贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050 AC code: #include<stdio.h> #include<str ...

  7. POJ 1083 &amp;&amp; HDU 1050 Moving Tables (贪心)

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  8. hdoj 1050 Moving Tables【贪心区间覆盖】

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  9. HDOJ 1050 Moving Tables

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

随机推荐

  1. redis 批量删除keys

    “mf*” 为你的key  redis-cli -h 127.0.0.1 -p 6379 -a yourpassword keys “mf*” |xargs  redis-cli -h 127.0.0 ...

  2. 【专题】平衡树(Treap,fhq-treap)

    [旋转] 平衡树中的旋转是指在不改变中序遍历的前提下改变树的形态的方式.(中序遍历=排名顺序) 右旋将当前点的左节点旋上来,左旋反之.(图侵删) void rturn(int &k){ int ...

  3. input限制

    转载,暂未使用,可以借鉴. 出处:http://blog.csdn.net/a13590394462/article/details/73943785

  4. HDU 1171 Big Event in HDU(01背包)

    题目链接 题意:给出n个物品的价值v,每个物品有m个,设总价值为sum,求a,b.a+b=sum,且a尽可能接近b,a>=b. 题解:01背包. #include <bits/stdc++ ...

  5. HSL

    说明: HSL(H,S,L) 取值: H: Hue(色调).0(或360)表示红色,120表示绿色,240表示蓝色,也可取其他数值来指定颜色.取值为:0 - 360 S: Saturation(饱和度 ...

  6. 倍增 Tarjan 求LCA

                                                                                                         ...

  7. js操作控制iframe页面的dom元素

    1.代码1  index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  8. E - Sudoku HDU - 5547 (搜索+暴力)

    题目链接:https://cn.vjudge.net/problem/HDU-5547 具体思路:对于每一位上,我们可以从1到4挨着去试, 具体判断这一位可不可以的时候,看当前这一位上的行和列有没有冲 ...

  9. Qbot回归,已感染5.4万台计算机

    Qbot回归,已感染5.4万台计算机 近日,BAESystems的安全人员发表了一篇关于Qbot网络感知蠕虫回归的调查报告,指出已经感染了5.4万台计算机. FreeBuf百科 Qbot蠕虫,也叫Qa ...

  10. aarch64_l1

    L-function-1.23-18.fc26.aarch64.rpm 2017-02-14 08:01 139K fedora Mirroring Project L-function-devel- ...