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

 

你可能感兴趣的:(backup)