zoukankan      html  css  js  c++  java
  • poj1033

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

    #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, -1, sizeof(link));
        scanf("%d%d", &cluster_num, &file_num);
        for (int i = 0; i < cluster_num; i++)
            is_free[i] = true;
        int target_pos = 0;
        total_length = 0;
        for (int i = 0; i < file_num; i++)
        {
            int file_part_num;
            scanf("%d", &file_part_num);
            total_length += file_part_num;
            for (int j = 0; 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
    ", next_point + 1, start_point + 1);
            link[start_point] = -1;
            is_free[start_point] = false;
            is_free[next_point] = true;
            start_point = next_point;
        }
        return start_point;
    }
    
    void work()
    {
        optimized = false;
        for (int i = 0; i < total_length; i++)
            if (is_free[i])
                drag(i, -1);
        for (int i = 0; i < total_length; i++)
        {
            if (link[i] != -1 && link[i] != i)
            {
                printf("%d %d
    ", i + 1, total_length + 1);
                is_free[i] = true;
                is_free[total_length - 1] = false;
                int last_pos = drag(i, i);
                link[last_pos] = -1;
                printf("%d %d
    ", total_length + 1, last_pos + 1);
                is_free[last_pos] = false;
                is_free[total_length - 1] = true;
            }
        }
        if (!optimized)
            printf("No optimization needed
    ");
    }
    
    int main()
    {
        input();
        work();
        return 0;
    }
    View Code
  • 相关阅读:
    VMware Workstation 6.0 正式版公布
    KMyMoney:全体理财好管家
    Bugzilla 3.0 公布
    Brightside:切换工作区的小东西
    QTM-Blogging 客户端
    MDF2ISO-将 MDF 转换为 ISO
    Yakuake 2.8 beta1
    Red Hat 的 Liberation 字体
    Dictman:有效的词典呆板人
    digiKam 0.9.2 Beta 1
  • 原文地址:https://www.cnblogs.com/rainydays/p/3265433.html
Copyright © 2011-2022 走看看