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
在南开大学,一年一度的“校长杯”三大球比赛是广大师生必不可少的一次运动大餐。随着南开大学学校规模的扩大和体育事业的发展,参与校长杯赛事的师生越来越多。竞赛采用的是传统的“循环赛”制,即每队的选手都必须和其他各队选手较量一次。为了竞赛日程安排方便,报名的队伍数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 }