CodeForces 618B Guess the Permutation

只要找出当前没用过的数字中,大于或等于当前这一列的最大值就可以

#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;

const int maxn=100;
int n;
int x[maxn][maxn];
int ans[maxn];
int flag[maxn];

int main()
{
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            scanf("%d",&x[i][j]);

    memset(flag,0,sizeof flag);

    for(int j=1; j<=n; j++)
    {
        int Max=-1;
        for(int i=1; i<=n; i++) Max=max(Max,x[i][j]);
        for(int i=Max; i<=n; i++)
        {
            if(flag[i]==0)
            {
                ans[j]=i;
                flag[i]=1;
                break;
            }
        }
    }
    for(int i=1; i<=n; i++) printf("%d ",ans[i]);
    printf("\n");
    return 0;
}
时间: 2024-10-02 13:17:25

CodeForces 618B Guess the Permutation的相关文章

【CodeForces 618B】Guess the Permutation

题 题意 有个1到n的一个全排列,告诉你第i个数和全部n个数相比的较小的是哪个,和自己相比时为0,于是有个主对角线为0的矩阵,求原数列 分析 我的想法是,给我们的每一行之和按大小排一下,就知道第i个数是数列里第几大的了.因为是n的全排列,所以第几大就是几. 按sum排完序后,r[sum[i].id]=i;这句表示原来在id位置的数是现在第i大的,所以r就是要求的全排列了. 代码 #include <stdio.h> #include <algorithm> #define N 60

【搜索】【并查集】Codeforces 691D Swaps in Permutation

题目链接: http://codeforces.com/problemset/problem/691/D 题目大意: 给一个1到N的排列,M个操作(1<=N,M<=106),每个操作可以交换X Y位置上的数字,求可以得到的最大字典序的数列. 题目思路: [搜索][并查集] 这题可以用搜索或者并查集写,都能过. 把位置分成若干块,每一块里面的位置都是可以被这一块里另一个位置经过若干次调换的(类似强连通,位置可达). 然后把每一块位置里的 位置按从小到大排序,位置上的值按从大到小排序,依次填入位置

Codeforces 691D. Swaps in Permutation

题目链接:http://codeforces.com/problemset/problem/691/D 题意: 给你一个含有 N 个不重复数的序列, 以及 M 对形如 (ai, bj) 的数, (ai ,bj) 代表着可以把第 ai 个数可以和第 bj 个数进行交换, 问如何交换才能使得变换后的字典序最大,每个变化可选可不选,也可选多次. 思路: 可以想到, 如果 a 可以和 b 换, b 可以和 c 换, 那么 a 就可以间接的和 c 换, 依次类推, 如果某些位置直接可以变换, 那么与这些位

codeforces 500B.New Year Permutation 解题报告

题目链接:http://codeforces.com/problemset/problem/500/B 题目意思:给出一个含有 n 个数的排列:p1, p2, ..., pn-1, pn.紧接着是一个 n * n 的矩阵A,当且仅当 Aij = 1 时,pi 与 pj 可以交换数值.现在问如何交换数值,使得最后得到的排列字典序最小. 比赛的时候不会做,看了Tutorial 1 的解法,觉得别人做得太巧妙了,出题者也出得很好 ^_^ 可以看这个:http://codeforces.com/blog

[Codeforces 864D]Make a Permutation!

Description Ivan has an array consisting of n elements. Each of the elements is an integer from 1 to n. Recently Ivan learned about permutations and their lexicographical order. Now he wants to change (replace) minimum number of elements in his array

codeforces 691D Swaps in Permutation(并查集)

题意: 给你一个长度为n的数列,然后给你m组数, 表示这两个数可以交换 然后让你给出字典序最大的数列 思路: 用并查集,可交换的数都是成组的,把同一并查集中的数加在根节点的vector后, 在一个并查集中的数,从大到输出就好了 /* *********************************************** Author :devil ************************************************ */ #include <cstdio>

codeforces 622. Optimal Number Permutation 构造

题目链接 假设始终可以找到一种状态使得值为0, 那么两个1之间需要隔n-2个数, 两个2之间需要隔n-3个数, 两个3之间隔n-4个数. 我们发现两个三可以放到两个1之间, 同理两个5放到两个3之间....这样就构造好了. #include <iostream> #include <vector> #include <cstdio> #include <cstring> #include <algorithm> #include <cmat

Codeforces 553B Kyoya and Permutation

problem 题意 本题题意不太容易看懂.给定一个序列,我们可以把这个序列变成一些循环置换的和.然而这种置换的方法是不止一种的.我们定义一种standard cyclic representation,即每个循环置换中最大的数都在第一个.把得到的循环置换的括号去掉,我们可以得到一个新的序列.定义一个序列,使得它变成置换后再去掉括号得到的新序列和原序列相同,那么称这样的序列是稳定的.给定一个n(序列长度)和k,要求求出所有稳定序列按字典序排序后的第k大序列. 思路 首先我们可以证明,稳定序列是具

CodeForces 622D Optimal Number Permutation

是一个简单构造题. 请观察公式: 绝对值里面的就是 |di-(n-i)|,即di与(n-i)的差值的绝对值. 事实上,对于任何n,我们都可以构造出来每一个i的di与(n-i)的差值为0. 换句话说,就是这个最小值一定可以构造出来是0. 假设输入是6:那么可以这样构造:1 3 5 5 3 1 2 4 6 4 2 6 假设输入是7:那么可以这样构造:1 3 5 7 5 3 1 2 4 6 6 4 2 7 从上面就能看出怎么构造了,n最后放空缺的两个位置,剩下的从小到大一个一个放,奇数放左边构造,偶数