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 }

 

posted on 2012-08-20 20:27  mycapple  阅读(252)  评论(0编辑  收藏  举报

导航