1325:【例7.4】 循环比赛日程表——分治

这篇具有很好参考价值的文章主要介绍了1325:【例7.4】 循环比赛日程表——分治。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【题目描述】
设有N个选手进行循环比赛,其中N=2^M,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。

【输入】
输入:M。

【输出】
输出:表格形式的比赛安排表。一行各数据间用一个空格隔开。

【输入样例】
3
【输出样例】
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

分析

可以发现规律,左上等于右下,右上等于左下,把整个大矩阵分成最小的一块,也就是1个1,然后慢慢再合并成一个大矩阵;看下zjt大佬的题解:1325:【例7.4】 循环比赛日程表
1325:【例7.4】 循环比赛日程表——分治文章来源地址https://www.toymoban.com/news/detail-418705.html

#include<bits/stdc++.h>

using namespace std;

int a[1000][1000];
int m;

int main() {
    std::ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> m;
    a[1][1] = 1;
    int d = 1;//扩展的数的差值,行列索引的差值
    for (int k = 1; k <= m; ++k) {//在起点基础上再扩展m次
        //根据已知的左上角 +d 来确定右上角
        for (int i = 1; i <= d; i++) {//行(1,d)
            for (int j = d + 1; j <= 2 * d; ++j) {//列(d+1,2d)
                a[i][j] = a[i][j - d] + d;
            }
        }
        //进行复制,将左上角复制给右下,右上复制给左下

        //左上到右下(行列各加d)
        for (int i = d + 1; i <= 2 * d; i++) {
            for (int j = d + 1; j <= 2 * d; j++) {
                a[i][j] = a[i - d][j - d];
            }
        }
        //右上到左下(行+d,列1~d)
        for (int i = d + 1; i <= 2 * d; i++) {
            for (int j = 1; j <= d; j++) {
                a[i][j] = a[i - d][j + d];
            }
        }
        //进行下一次的扩展
        d *= 2;
    }
    for (int i = 1; i <= pow(2, m); ++i) {
        for (int j = 1; j <= pow(2, m); ++j) {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}


到了这里,关于1325:【例7.4】 循环比赛日程表——分治的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分治与减治算法实验:题目6 淘汰赛冠军问题

    目录 前言 实验内容 实验流程 实验分析 实验过程 流程演示 写出伪代码 实验代码 运行结果 改进算法 总结 淘汰赛冠军问题是一个经典的算法设计与分析的问题,它要求我们在给定的n个参赛者中,通过一系列的比赛,找出最终的冠军。这个问题可以用分治策略来解决,即将

    2024年02月06日
    浏览(182)
  • 五种基础算法小结与典型题目分享(动态规划、分治、贪心、回溯、分支限界)

    动态规划是用于解决多阶段决策问题的算法策略。它通过用变量集合描述当前情境来定义“状态”,进而用这些状态表达每个阶段的决策。 每个阶段的状态是基于前面的状态经过某种决策得到的。通过建立状态间的递推关系,并将其形式化为数学递推式,得到“状态转移方程

    2024年01月19日
    浏览(65)
  • 南京邮电大学算法与设计实验一:分治策略(最全最新,与题目要求一致)

    实验原理: 1、用分治法实现一组无序序列的两路合并排序和快速排序。要求清楚合并排序及快速排序的基本原理,编程实现分别用这两种方法将输入的一组无序序列排序为有序序列后输出。 2、采用基于“五元中值组取中值分割法”(median-of-median-of-five partitioning)的线性时

    2024年04月17日
    浏览(110)
  • 分治与减治算法实验:题目2 排序中分治法的程序设计

    目录 前言: 一、实验内容 二、实验目的 三、实验步骤 四、实验过程 1、算法分析 2、写出伪代码 3、代码实现 4、代码详解 5、用例测试 6、复杂度分析 总结 分治法是一种将复杂问题分解为若干个相同或相似的子问题,然后递归地求解子问题,最后将子问题的解合并为原问题

    2023年04月25日
    浏览(43)
  • Volatility2安装使用以及CTF比赛题目(复现)

    Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。 题目链接:链接: https://pan.baidu.com/s/1s9Ey8G12COT_vI65TwhIKw?pwd=shkd 提取码: shkd Volatility2.6需要python2,pip安装模块也需要2版本,具体命

    2024年02月06日
    浏览(57)
  • 算法设计与分析实验:分治与减治算法实验:题目1 数字旋转方阵程序设计

    目录 前言 一、数字旋转方阵 二、实验内容 三、实验目的 四、实验步骤 五、实验过程  总结 算法同样是计算机四大件的一个很重要的内容,本实验的目的是通过编写一个数字旋转方阵程序,来掌握分治与减治算法的基本思想和实现方法。 数字旋转方阵是一个n×n的矩阵,其

    2024年02月01日
    浏览(109)
  • 【数学建模】离散模型(循环比赛的名次)

    问题描述 若干支球队参加单循环比赛,各队两两交锋,假设每场比赛只计胜负,不计比分,且不允许平局。在循环赛结束后怎样根据他们的比赛结果排列名次呢? 一种表述比赛结果的办法是,用图的顶点表示球队,用连接两个顶点的、有方向的边表示两支球队的比赛结果,

    2024年02月08日
    浏览(64)
  • 矩阵乘法的三种算法(蛮力嵌套循环法,分治递归法,Strassen法)

    目录 一.矩阵乘法的嵌套循环算法 二.矩阵乘法的递归算法 三.矩阵乘法的Strassen算法 一.矩阵乘法的嵌套循环算法 伪代码: C++代码: 二.矩阵乘法的递归算法 伪代码: C++代码: 原理:矩阵乘法的分块运算: 【2.5】矩阵分块相乘 - 知乎 (zhihu.com) 复杂度: 三.矩阵乘法的Strass

    2024年02月13日
    浏览(34)
  • 湘大 XTU OJ 1308 比赛 题解:循环结束的临界点+朴素模拟

    比赛 有 n个人要进行比赛 ,比赛规则如下: 假设每轮比赛的人是m,取 最大的k , k=2^t 且k≤m。 这k个人每2人举行一场比赛 ,胜利者进入一下轮,失败者被淘汰。 余下的m-k个人,不进行比赛,直接进入下一轮 直到决出冠军,比赛结束 。 比如有5个人参加比赛,第一轮举办

    2024年02月13日
    浏览(41)
  • 头歌(educoder)实训作业题目及答案分享 ——1-7 Java入门-分支与循环练习

    📜个人简介 :  作者简介:大家好,我是Passenger.n✌️  支持一下:点赞👍+收藏🌟+留言📪 📣 系列专栏:java基础🍁 ✉️格言:花有重开日,人无再少年!🌞 万事开头难,既然迈开了这一步,那就坚持走下去! 这是我的第一篇博客,希望萌新看了有收获,大佬看了给指

    2024年02月04日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包