Obtain a Permutation乱搞

Posted bxd123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Obtain a Permutation乱搞相关的知识,希望对你有一定的参考价值。

 

题意:

给定一个矩阵,问最少能用多少次操作使得矩阵有序(类似离散化坐标)

操作一: 修改一个元素的值

操作二:将矩阵的一列上移

 

技术图片
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int N=1e6+100;

map<int,int>mp;

int main() {
    int n,m;
    cin>>n>>m;
    int a[2*n+1][m+1];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            scanf("%d",&a[i][j]),a[i+n][j]=a[i][j];
    int ans=0;

    for(int temp,j=1;j<=m;j++,ans+=temp) {
        temp=n;
        mp.clear();
        for(int i=1;i<=2*n;i++) a[i][j]-=(i-1)*m;
        for(int i=1;i<=n;i++) mp[a[i][j]]++;
        for(int i=1;i<=n;i++) {
            temp=min(temp,i-1+n-mp[j-(i-1)*m]);
            --mp[a[i][j]];
            ++mp[a[i+n][j]];
        }
    }
    cout<<ans;
}
View Code

 

以上是关于Obtain a Permutation乱搞的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 1294E Obtain a Permutation

Codeforces 1294E - Obtain a Permutation

Codeforces Round #615 (Div. 3) E. Obtain a Permutation

CF1294E Obtain a Permutation 题解

[Codeforces #615 div3]1294E Obtain a Permutation

U - Obtain a Permutation CodeForces - 1294E