NK 1437 校长杯

地址:http://acm.nankai.edu.cn/p1437.html

思路:http://wenku.baidu.com/view/a081ee49e45c3b3567ec8bf4.html    不太懂。。。

题目:

  1437: 校长杯


Time Limit: 1500 ms    Memory Limit: 32000 kB  
Judge type: Multi-cases Special Judge
Total Submit : 108  (51 users)    Accepted Submit : 65  (45 users)    Page View : 3964 
Font Style: Aa Aa Aa

        在南开大学,一年一度的“校长杯”三大球比赛是广大师生必不可少的一次运动大餐。随着南开大学学校规模的扩大和体育事业的发展,参与校长杯赛事的师生越来越多。竞赛采用的是传统的“循环赛”制,即每队的选手都必须和其他各队选手较量一次。为了竞赛日程安排方便,报名的队伍数n都将是2的k次幂,(0<k<9,且k为自然数)。为了避免参赛师生过于疲劳,竞赛安排每支队伍每天只比赛一次。同时,竞赛一共进行(n-1)天。
      现在,竞赛组委会想请你帮忙设计一个循环赛的日程表,使得竞赛的日程安排满足上述要求。

Input

输入只有一个数k。

Output

请输出一个n行,每行有n个正整数的循环赛日程表。相邻的两个正整数用一个空格隔开。
其中,第i行(0<i<n+1)表示第i队的参赛日程,第1个正整数为i,表示参赛队的队号,后面的(n-1)个正整数表示该队在参赛日程中,依次较量的队号。

Sample Input

1

Sample Output

1 2

2 1

别人代码如下:

 1 #include<stdio.h>

 2 #include<stdlib.h>

 3 short game[1024][1024];

 4 int main()

 5 {

 6    int k;

 7    scanf("%d",&k);

 8    int i,j,l,r;

 9    int Max=1<<k;

10    for(i=1;i<=Max;i++)

11    {

12      game[i][1]=i;

13    }

14    for(i=2;i<=Max;i*=2)

15      for(j=1;j<Max;j+=i)

16      {

17         for(r=j;r<=j+i/2-1;r++)

18           for(l=i/2+1;l<=i;l++)

19           {

20               game[r][l]=game[r+i/2][l-i/2];

21               game[r+i/2][l]=game[r][l-i/2];

22           }

23      }

24    for(i=1;i<=Max;i++)

25    {

26       for(j=1;j<=Max;j++)

27          printf("%hd ",game[i][j]);

28       printf("\n");

29    }

30    system("pause");

31    return 0;

32 }

 

你可能感兴趣的:(NK 1437 校长杯)