zoukankan      html  css  js  c++  java
  • 6. 循环赛日程表

    问题描述:

    设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:每个选手必须与其他n-1个选手各赛一次,每个选手一天只能赛一次,循环赛一共进行n-1天。

    输出样例:

    8
    1 2 3 4 5 6 7 8
    2 1 4 3 6 5 8 7
    3 4 1 2 7 8 5 6
    4 3 2 1 8 7 6 5
    5 6 7 8 1 2 3 4
    6 5 8 7 2 1 4 3
    7 8 5 6 3 4 1 2
    8 7 6 5 4 3 2 1

    思路:

    按照分治策略,将对手分成两半,n个选手的比赛日程表就可以通过n/2个选手设计的日程表来决定。然后将左上角和左下角的表抄到各自对应的对角上就可以了。

    #include<iostream>
    #include<vector> 
    using namespace std;
    int n;
    vector<vector<int>> a;
    
    void solve(int L, int R) {
        if (R - L == 0) return;
        int mid = (L + R ) / 2;
        solve(L, mid);
        solve(mid+1, R);
        int k = (R-L+1)/2;
        for (int i = L; i <= (R-L)/2+L; i++)
            for (int j = 0; j <= R/2; j++) {
                a[i+k][j+k] = a[i][j];
                a[i][j+k] = a[i+k][j];
            }
    }
    
    int main(){
        scanf("%d",&n);
        a.resize(n);
        for (int i = 0; i < n; i++) {
            a[i].resize(n);
            a[i][0] = i + 1; 
        }
        solve(0, n-1);
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++)
                printf("%d ",a[i][j]);
            putchar('
    ');
        }
        return 0;
    } 
  • 相关阅读:
    for 循环/ while 循环/ do-while 循环
    让元素脱离动画流
    缓存布局信息
    一个程序员的管理心得
    CenOS下Tomcat外网不能访问
    卸载CentOS自带的JDK并配置指定JDK环境变量
    Linux系统安装Mysql
    系统的非功能性需求
    做软件的追求
    路途小歇
  • 原文地址:https://www.cnblogs.com/astonc/p/11705196.html
Copyright © 2011-2022 走看看