zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    关于学习Knockoutjs--入门(一)
    h5移动端前端性能优化
    VS2015常用快捷键总结
    51nod1196 字符串的数量
    51nod1189 阶乘分数
    51nod1161 Partial Sums
    51nod1040 矩阵相乘结果的判断
    51nod 1125 交换机器的最小代价
    51nod 1120 机器人走方格 V3
    51nod 1040 最大公约数之和
  • 原文地址:https://www.cnblogs.com/-yjun/p/10420065.html
Copyright © 2011-2022 走看看