zoukankan      html  css  js  c++  java
  • poj 1033

    http://poj.org/problem?id=1033

    题意:对一个磁盘进行整理,所谓的整理就是把同一个文件的一些数据,按照次序依次的存放,问整理的时候,磁盘的替换的操作是哪一些

    思路:首先如果输入的时候就像定义好,每个文件应该存放的位置,然后看看它本身的位置和存放的位置是否一致,一致则不需要进行操作,不一致在进行操作

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 
     5 int m,n;
     6 bool mark[10005];   //这个是用判断有没有环。
     7 int num[10005]; //0代表为空,-1代表匹配好
     8 int flag;
     9 
    10 void dfs(int x)
    11 {
    12     if(!num[num[x]])   //这个则说明,num[x]可以和x进行替换
    13     {
    14         printf("%d %d
    ",x,num[x]);
    15         num[num[x]] = -1;
    16         num[x] = 0;
    17         return;
    18     }
    19     if(mark[num[num[x]]])   //判断是否成环,如果成了环,则把最开始的那个与最后的一个进行交换 ,空出一个位置。
    20     {
    21         for(int i = m;i>0;i--)
    22             if(!num[i])
    23             {
    24                 printf("%d %d
    ",x,i);
    25                 num[i] = num[x];
    26                 num[x] = 0;
    27                 return;
    28             }
    29     }
    30     dfs(num[x]);
    31     printf("%d %d
    ",x,num[x]);
    32     num[num[x]] = -1;
    33     num[x] = 0;
    34 }
    35 
    36 
    37 int main()
    38 {
    39     while(~scanf("%d%d",&m,&n))
    40     {
    41         int k,cnt = 1,tmp;
    42         flag = 0;
    43         memset(num,0,sizeof(num));
    44         for(int i = 0;i<n;i++)
    45         {
    46             scanf("%d",&k);
    47             while(k--)
    48             {
    49                 scanf("%d",&tmp);
    50                 num[tmp]=cnt++;
    51                 if(tmp ==cnt-1)  //不用进行交换
    52                     num[tmp] = -1;
    53             }
    54         }
    55         for(int i = 1;i<=m;i++)
    56         {
    57             if(num[i]&&num[i]!=-1)
    58             {
    59                 memset(mark,false,sizeof(mark));
    60                 flag = 1;
    61                 mark[i] = true;
    62                 dfs(i);
    63             }
    64         }
    65         if(!flag)
    66             printf("No optimization needed
    ");
    67     }
    68     return 0;
    69 }
  • 相关阅读:
    AC自动机模板
    HDU 3065 病毒侵袭持续中(AC自动机)
    HDU 2896 病毒侵袭(AC自动机)
    HDU 2222 Keywords Search (AC自动机模板题)
    HDU 1113 Word Amalgamation
    HDU 1171 Big Event in HDU(母函数或01背包)
    37.Qt网络与通信
    2.Matlab数值数组及其运算
    36.QT地图
    35.QT蝴蝶飞舞
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/6699164.html
Copyright © 2011-2022 走看看