模拟题,注意不需要移动的情况要特殊输出

#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std; #define MAX_CLUSTER_NUM 10005 int cluster_num, file_num;
int link[MAX_CLUSTER_NUM];
bool is_free[MAX_CLUSTER_NUM];
int total_length;
bool optimized; void input()
{
memset(link, -, sizeof(link));
scanf("%d%d", &cluster_num, &file_num);
for (int i = ; i < cluster_num; i++)
is_free[i] = true;
int target_pos = ;
total_length = ;
for (int i = ; i < file_num; i++)
{
int file_part_num;
scanf("%d", &file_part_num);
total_length += file_part_num;
for (int j = ; j < file_part_num; j++)
{
int original_pos;
scanf("%d", &original_pos);
original_pos--;
link[target_pos] = original_pos;
target_pos++;
is_free[original_pos] = false;
}
}
} int drag(int start_point, int end_pos)
{
optimized = true;
int next_point;
while (link[start_point] != end_pos)
{
next_point = link[start_point];
printf("%d %d\n", next_point + , start_point + );
link[start_point] = -;
is_free[start_point] = false;
is_free[next_point] = true;
start_point = next_point;
}
return start_point;
} void work()
{
optimized = false;
for (int i = ; i < total_length; i++)
if (is_free[i])
drag(i, -);
for (int i = ; i < total_length; i++)
{
if (link[i] != - && link[i] != i)
{
printf("%d %d\n", i + , total_length + );
is_free[i] = true;
is_free[total_length - ] = false;
int last_pos = drag(i, i);
link[last_pos] = -;
printf("%d %d\n", total_length + , last_pos + );
is_free[last_pos] = false;
is_free[total_length - ] = true;
}
}
if (!optimized)
printf("No optimization needed\n");
} int main()
{
input();
work();
return ;
}

poj1033的更多相关文章

  1. POJ1033 Defragment

    题目来源:http://poj.org/problem?id=1033 题目大意: 某操作系统的文件系统中,所有的磁盘空间被分为N个大小相等的cluster,编号1至N.每个文件占用一个或多个clus ...

  2. ACM学习大纲

    1 推荐题库 •http://ace.delos.com/usaco/ 美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以b ...

  3. ACM训练大纲

    1. 算法总结及推荐题目 1.1 C++ STL • STL容器: set, map, vector, priority_queue, queue, stack, deque, bitset• STL ...

  4. ACM学习大纲(转)

    1 推荐题库 •http://ace.delos.com/usaco/ 美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以b ...

随机推荐

  1. String js删除字符串的最后一个字符三种方法

    字符串 var basic = "abc,def,ghi,"; 第一种 basic = basic.substr(0, basic.length - 1); 第二种 basic = ...

  2. 默认css修改

    input-------------------------------------------------- .input-item input{ width: 100%; height: 60px ...

  3. C++ STL 的底层数据结构实现

    C++ STL 的实现:   1.vector      底层数据结构为数组 ,支持快速随机访问   2.list            底层数据结构为双向链表,支持快速增删   3.deque    ...

  4. SpringBoot 3.SpringBoot 整合 MyBatis 逆向工程以及 MyBatis 通用 Mapper

    一.添加所需依赖,当前完整的pom文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&qu ...

  5. php 微信公众号上传永久素材

    <?php namespace Mob\Controller; use Think\Controller; class WxmaterialController extends Controll ...

  6. 【题解】 [HNOI2009] 最小圈 (01分数规划,二分答案,负环)

    题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除 ...

  7. 【转】MPU6050的数据获取、分析与处理

    摘要 MPU6050是一种非常流行的空间运动传感器芯片,可以获取器件当前的三个加速度分量和三个旋转角速度.由于其体积小巧,功能强大,精度较高,不仅被广泛应用于工业,同时也是航模爱好者的神器,被安装在各 ...

  8. npm 设置地址

    -- 查看当前地址: npm config get registry https://registry.npmjs.org/ npm config get disturl undefined -- 设 ...

  9. linux socat命令

    http://note.youdao.com/noteshare?id=35901183d9ccc09632339ec971fa58dd

  10. VBA:Double类型与Decimal类型

    Sub DataType() For i = 0 To 100 t1 = t1 + 0.1 t2 = t2 + CDec(0.1) Debug.Print "Double=" &a ...