周子寓
(zzy10124)
1
打印循环赛程
时间:1s 空间:256M
题目描述
n(n=2k,k=1,2,3……)个参赛人员的循环赛日程安排,
要求:
1、每个选手必须与其他n-1个选手各比赛一次;
2、每个选手一天只能参赛一次;
3、循环赛在n-1天内结束。
第一行表示选手编号,后面n-1行,在表中的第i行和第j列处填入第i-1天遇到编号为j的选手。
输入格式
1个整数k
输出格式
二维表格,在表中的第i行和第j列处填入第i个选手在第j天遇到的选手。
样例输入
2
样例输出
1 2 3 4 2 1 4 3 3 4 1 2 4 3 2 1
约定
k<=6
爆搜TLE0
3 个赞
周子寓
(zzy10124)
2
囡囡把代码给了,为了防止你们说我刷解决方案,我发个代码
周子寓
(zzy10124)
3
#include <bits/stdc++.h>
#define ll long long
#define For(x,n) for(int i=x;i<=n;i++)
#define foR(x,n) for(int i=x;i>=n;i--)
using namespace std;
inline void read(int &a) {a=0;char c;bool f=0;while((c<'0'||c>'9')&&c!='-') c=getchar();c=='-'&&(f=1,c=getchar());while(c>='0'&&c<='9'){a=a*10+c-'0';c=getchar();}f&&(a=-a);}
inline void write(int a) {if(a<0) {a=-a;putchar('-');}if(a>9) {write(a/10);}putchar(a%10+'0');}
int a[105][105]={1};;
int main() {
int n,t=1;read(n);int m=pow(2,n);
For(0,n-1) {
for(int j=0;j<t;j++) for(int k=0;k<t;k++) {
a[j][k+t]=a[j][k]+t;
a[j+t][k]=a[j][k+t];
a[j+t][k+t]=a[j][k];
}t*=2;
}For(0,m-1) {
for(int j=0;j<m;j++) cout<<a[i][j]<<' ';
cout<<endl;
}
return 0;
}