• Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) B. Guess the Permutation


    time limit per test2 seconds
    memory limit per test256 megabytes
    inputstandard input
    outputstandard output
    Bob has a permutation of integers from 1 to n. Denote this permutation as p. The i-th element of p will be denoted as pi. For all pairs of distinct integers i, j between 1 and n, he wrote the number ai, j = min(pi, pj). He writes ai, i = 0 for all integer i from 1 to n.
    Bob gave you all the values of ai, j that he wrote down. Your job is to reconstruct any permutation that could have generated these values. The input will be formed so that it is guaranteed that there is at least one solution that is consistent with the information given.
    Input
    The first line of the input will contain a single integer n (2 ≤ n ≤ 50).
    The next n lines will contain the values of ai, j. The j-th number on the i-th line will represent ai, j. The i-th number on the i-th line will be 0. It's guaranteed that ai, j = aj, i and there is at least one solution consistent with the information given.
    Output
    Print n space separated integers, which represents a permutation that could have generated these values. If there are multiple possible solutions, print any of them.
    Examples
    Input
    Copy
    2
    0 1
    1 0
    Output
    Copy
    2 1
    Input
    Copy
    5
    0 2 2 1 2
    2 0 4 1 3
    2 4 0 1 3
    1 1 1 0 1
    2 3 3 1 0
    Output
    Copy
    2 5 4 1 3
    Note
    In the first case, the answer can be {1, 2} or {2, 1}.
    In the second case, another possible answer is {2, 4, 5, 1, 3}.

    题解:给了一个方形矩阵,其中第i行第j个数表示原数列第i个数与第j个数的最小值,然后让你求出原数列,这个数列的数属于1-n,且不重复.

    分析一下:原数列中,一个数和其他位置的数的最小值,总是小于等于原来的数.比如数列2 5 4 1 3,第一个数2与其他数的最小值总是小于等于2,

    所以,我们只要比较方形矩阵中每一行的同一个位置,求出的最大的那个数就是我们要求的数.

    例如:

    0 2 2 1 2
    2 0 4 1 3
    2 4 0 1 3
    1 1 1 0 1

    得到的数列: 2 4 4 1 3,发现4重复了两次,因为5和其他数比的最小值不会等于5,所以我们可以弄个标记数组,发现重复的数就把他加一,所以得到正确的数列: 2 4 5 1 3.

    #include <bits/stdc++.h>
    const int N=100;
    using namespace std;
    int a[N];
    int m[N];
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                int tmp;
                scanf("%d",&tmp);
                a[j]=max(tmp,a[j]);
            }
        }
        //memset(m,0,60);
       // for(int i=1;i<=n;i++) printf("%d %d
    ",a[i],b[i]);
        for(int i=1;i<=n;i++){
            m[a[i]]++;
            if(m[a[i]]>1) a[i]++;
            printf("%d ",a[i]);
        }   //cout << "Hello world!" << endl;
        return 0;
    }
    
  • 相关阅读:
    MVC之Servlet控制器(二)
    MVC之Servlet控制器(一)
    基于Java实现批量下载网络图片
    @ModelAttribute运用详解
    MyBatis
    理解RESTful架构
    并行计算结课论文边写边总结2
    并行计算结课论文边写边总结(1)
    CUDA笔记(六)
    ubuntu12.04
  • 原文地址:https://www.cnblogs.com/-yjun/p/10420065.html
Copyright © 2020-2023  润新知