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; }
以上是关于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 题解