zoukankan      html  css  js  c++  java
  • hdu4671Backup Plan

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

    这个高端的题意啊 看了N久啊

    n>m时  直接第一列按顺序来 第二列为M+1

    else  第一列顺序来 第二列 按第一组为N  第二组为N-1  依次分配

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 using namespace std;
     7 #define N 110
     8 int f[110][110],a[110][110],x[110];
     9 int main()
    10 {
    11     int i,j,k,n,m;
    12     while(cin>>n>>m)
    13     {
    14         memset(f,0,sizeof(f));
    15         if(n>m)
    16         {
    17             for(i = 1; i <= m ; i++)
    18             {
    19                 a[i][1] = i;
    20                 f[i][i] = 1;
    21             }
    22             for(i = 1 ; i <= m ; i++)
    23             {
    24                 a[i][2] = m+1;
    25                 f[i][m+1] = 1;
    26             }
    27             for(i = 1; i <= m ; i++)
    28             {
    29                 printf("%d %d",a[i][1],a[i][2]);
    30                 for(j = 1; j  <= n ; j++)
    31                 {
    32                     if(!f[i][j])
    33                     printf(" %d",j);
    34                 }
    35                 puts("");
    36             }
    37         }
    38         else
    39         {
    40             int j = 1;
    41             for(i = 1; i <= m ; i++)
    42             {
    43                 f[i][j]  = 1;
    44                 a[i][1] = j++;
    45                 if(j>n)
    46                 j = 1;
    47             }
    48             for(i = 1; i <= n ; i++)
    49             x[i] = n;
    50             j = 1;
    51             for(i = 1; i <= m ; i++)
    52             {
    53                 int o = a[i][1];
    54                 if(o == x[j])
    55                 x[j]--;
    56                 if(x[j]<1) x[j] = n;
    57                 f[i][x[j]] = 1;
    58                 a[i][2] = x[j]--;
    59                 if(x[j]<1)
    60                 x[j] = n;
    61                 j++;
    62                 if(j>n) j = 1;
    63             }
    64             for(i = 1; i <= m ; i++)
    65             {
    66                 printf("%d %d",a[i][1],a[i][2]);
    67                 for(j = 1; j  <= n ; j++)
    68                 {
    69                     if(!f[i][j])
    70                     printf(" %d",j);
    71                 }
    72                 puts("");
    73             }
    74         }
    75     }
    76     return 0;
    77 }
    View Code
  • 相关阅读:
    动词的形态及变化(转)
    数论基础
    P1505 [国家集训队]旅游
    贪心常见题
    主席树
    卡常火车头
    AC自动机
    左偏树
    位运算
    Linux下Vim常用操作
  • 原文地址:https://www.cnblogs.com/shangyu/p/3256651.html
Copyright © 2011-2022 走看看