Go CSP-S! • 5年前
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int da=pow(2.0,n)-1; //代表比赛的天数
int me=da+1; //代表比赛的队伍数量
bool dp[70][70]; //记录哪两只队伍已经比赛过
bool vis[70]; //记录一天里该队伍是否已经有比赛安排了
memset(dp,0,sizeof(dp)); //初始化为0
for(int i=1;i<=da;i++) //循环da天
{
int q=0; //控制输出格式的变量
memset(vis,0,sizeof(vis));//每一天的vis数组均需要初始化
cout<<"<"<<i<<">"; //输出每一天的格式要求
for(int j=1;j<=me;j++) //从小到大循环遍历每一只队伍
{
if(vis[j]==1)continue; //如果第j只队伍已经作为了前面队伍的对手则跳过
vis[j]=1; //开始安排第j只队伍的对手,并标记已经便利过
for(int k=j+1;k<=me;k++) //因为按规律得在“-”左边的队伍一定是小于右边的队伍(即对手)
{
if(vis[k]==0&&dp[j][k]==0) //如果从小到大找到队伍k,且j队伍与k队伍没有比赛过而且k队伍在1当天还没有安排则安排j与k比赛
{
dp[j][k]=1; //记录j和k已经比赛过
vis[k]=1; //标记k队伍在这一天里已经有比赛安排
if(q++)cout<<","; //控制输出个数
cout<<j<<"-"<<k;
break; //找到一场比赛后 跳出找接下来的比赛。
}
}
}
cout<<endl;
}
}
return 0;
}
评论:
请先登录,才能进行评论