码迷,mamicode.com
首页 > 其他好文 > 详细

sgu288:Best Tournament Schedule(构造)

时间:2015-07-18 17:11:59      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:构造

题目大意:
      一场比赛有 n 个参赛选手,要求选手之间两两都有且仅有一次对决。每一轮中一个选手至多可以对决一次,也就是每一轮选出若干对不相交的选手进行对决。现在要求出最少的对决轮数来结束比赛和此时的对决方案。

分析:
      首先确定答案,当 n 为偶数的时候,答案为 n?1 ,否则为 n ,另外,当 n=1 的时候,答案也为0。原因可以自行脑补。
      现在将比赛抽象成一个 n×n 的矩阵GGi,j表示 i,j 之间的对决发生在第几轮。那么我们就是要求每一行每一列不出现重复的数字。
       n 为奇数为例,每一行每一列除去 0 就有 n?1 个数,我们可以令 Gi,j=(i+j)modans ,毫无疑问是满足要求的。
      n为偶数的时候,我们需要特殊处理最后一行一列,我们可以令 Gi,n=(i+i)modans ,那么此时它也是满足要求的。

AC code:

#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <algorithm>
#include <string>
#include <sstream>
#include <iostream>
#include <map>
#include <set>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#define pb push_back
#define mp make_pair
#define clr(a, b) memset(a, b, sizeof a)
#define rep(i, a, b) for(int i = (a); i <= (b); ++i)
#define per(i, a, b) for(int i = (a); i >= (b); --i)
typedef long long LL;
typedef double DB;
typedef long double LD;
using namespace std;

void open_init()
{
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    ios::sync_with_stdio(0);
}

void close_file()
{
    #ifndef ONLINE_JUDGE
    fclose(stdin);
    fclose(stdout);
    #endif
}

const int MAXN = 2009;

int n, ans;
int g[MAXN][MAXN];

int main()
{
    open_init();

    scanf("%d", &n);
    if(n > 1) ans = n-(n&1^1);
    else ans = 0;
    rep(i, 1, ans)
        rep(j, i+1, ans)
            g[i][j] = g[j][i] = (i+j)%ans+1;
    rep(i, ans+1, n)
        rep(j, 1, n-1)
            g[i][j] = g[j][i] = (j<<1)%ans+1;
    printf("%d\n", ans);
    rep(i, 1, n)
    {
        rep(j, 1, n-1)
            printf("%d ", g[i][j]);
        printf("%d\n", g[i][n]);
    }

    close_file();
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

sgu288:Best Tournament Schedule(构造)

标签:构造

原文地址:http://blog.csdn.net/qq_20118433/article/details/46942985

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!