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

#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. Docker的安装和使用说明——Docker for Windows

    一.Docker安装 1.1官方方法 官方下载页面:http://www.docker.com/products/docker#/windows 官方下载地址:https://download.doc ...

  2. jdk命令行工具:jstat与jmap

    转自文章:http://blog.csdn.net/gzh0222/article/details/8538727 C:\Users\Administrator\Desktop>jstat -g ...

  3. redis scan迭代模糊匹配

    $redis = new Redis(); $redis->connect('localhost', 6379); $iterator = null; while (true) { $keys ...

  4. MySQL服务器最大连接数的合理设置

    MySQL服务器的连接数并不是要达到最大的100%为好,还是要具体问题具体分析,下面就对MySQL服务器最大连接数的合理设置进行了详尽的分析,供您参考. 我们经常会遇见“MySQL: ERROR 10 ...

  5. Spring点滴十:Spring自动装配(Autowire)

    在基于XML配置元数据,在bean的配置信息中我们可以使用<constructor-arg/>和<property/>属性来实现Spring的依赖注入.Spring 容器也可以 ...

  6. bzoj1013/luogu4035 球形空间生成器 (高斯消元)

    根据各点到圆心的距离相等,可以列出有N个等号的方程 假设圆心坐标是(x,y,z,...)的话,$x^2,y^2,z^2$等是可以消掉的 于是整理一下,就变成了N元1次方程组,有N个方程.而且保证是相容 ...

  7. 【bzoj3160】 万径人踪灭

    http://www.lydsy.com/JudgeOnline/problem.php?id=3160 (题目链接) 题意 给定一个由'a'和'b'构成的字符串,求不连续回文子序列的个数. Solu ...

  8. 敏捷持续集成(Jenkins)

    在前面已经完成git和gitlab的相关操作 1.持续集成的概念: 1. 什么是持续集成: 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可 ...

  9. 解题:CF1055F Tree and XOR

    题面 树上路径是可以通过到根的路径和LCA差出来的,所以建立一棵Trie树按位贪心即可......吗? 发现空间并不够,需要我们每层现建,要记录每个数和它异或答案之后在这一层插进去的编号 #inclu ...

  10. ueditor的上传文件漏洞(c#)

    项目中使用了ueditor,安全测试发现一个漏洞,涉及漏洞的文件名字为UploadHandler.cs,其中有一个方法: private bool CheckFileType(string filen ...