• 1478 -- 【分治练习】比赛安排1285


    很简单的题

    设有2^n(n<=6)个球队进行单循环比赛,计划在2^n-1天内完成,每个队每天进行一场比赛。
      设计一个比赛的安排,使在2^n-1天内每个队都与不同的对手比赛.例如n=2时的比赛安排为:
      队 1 2 3 4
      比赛安排为 
      第一天 1-2 3-4 
      第二天 1-3 2-4 
      第三天 1-4 2-3


    题解:
    is[i][j]记录i与j有没有比过,vis[i]记录当天i有没有比过,
    每天都从i=1开始遍历vis[i],若i在当天还没有出现过,则
    遍历is[i][j],取符合条件的最小j.

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<stack>
    #include<cstdio>
    #include<queue>
    #include<map>
    #include<vector>
    #include<set>
    using namespace std;
    const int maxn=1010;
    const int INF=0x3fffffff;
    typedef long long LL;
    typedef unsigned long long ull;
    int vis[110],is[110][110];
    int n,t;
    int main(){
    	scanf("%d",&n);
    	t=(1<<n)-1;
    	while(t--){
    		memset(vis,0,sizeof(vis));  //当天有没有比赛过
    		bool ok=0;
    		for(int i=1;i<=(1<<n);i++){
    			if(!vis[i]){
    				vis[i]=1;
    				for(int j=i+1;j<=(1<<n);j++){
    					if(!vis[j]&&!is[i][j]){
    						vis[j]=1;
    						is[i][j]=1;
    						if(ok) printf(" ");
    						printf("%d-%d",i,j);
    						ok=1; 
    						break; //为这一轮的i找一个就可以了 
    					}
    				}
    			}
    		} 
    		printf("
    ");
    	}
    return 0;
    }
    

      

  • 相关阅读:
    Python基础之基本数据类型
    Python基础之变量
    mysql数据库
    进程与线程
    并发编程
    网络编程
    内置函数(魔法方法)
    组合,封装,访问限制机制,property装饰器
    面向对象之继承
    Web开发中最致命的8个小错误
  • 原文地址:https://www.cnblogs.com/shirlybaby/p/13471233.html
Copyright © 2020-2023  润新知