1 条题解

  • 0
    @ 2023-6-11 12:22:22

    C++ :

    
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<string>
    #include<vector>
    #include<iostream>
    using namespace std;
     
    int team[70][70];	//表示与队伍i已经对战过的队伍 
    int cur[70];		//表示当前已经对战过的队伍
    int op[35][2];
    int n; 
     
    int main()
    {
    	cin >> n;
    	
    	int num = pow(2,n);
    	memset(team,0,sizeof(team));
    	for(int i=1; i<=num-1; i++)	//表示第i场比赛 
    	{
    		memset(cur,0,sizeof(cur));
    		memset(op,0,sizeof(op));
    		
    		int t = 0;
    		 
    		for(int j=1; j<=num; j++)	//表示第j支队伍 
    		{
    			if (cur[j] == 0)	//如果这支队伍没有对手,配对 
    			{
    				cur[j] = 1;
    				for(int k=1; k<=num; k++)	//k表示配对的对手 
    				{
    					if (j == k || cur[k] == 1)	//如果队伍k已经参与其他比赛,跳过 
    						continue;
    					if (team[j][k] == 0 && cur[k] == 0)	//如果队伍j与k没有对战过,配对 
    					{
    						team[j][k] = 1;
    						cur[k] = 1;
    						op[t][0] = j;
    						op[t++][1] = k;
    						break;
    					}
    				}
    			}
    		}
    		printf("<%d>",i);
    		for(int i=0; i<t; i++)
    			printf("%d-%d%c",op[i][0],op[i][1],i==t-1?10:32);
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    2719
    时间
    1000ms
    内存
    512MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者