#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define ll long long
const int len=1e5+4;
ll r[len],c[len];
ll f(ll a[],int n)
{
ll sum[len]={};
for(int i=1;i<=n;++i)
{
a[i]-=a[0]/n;//a[0]/n是最终状态每行或每列的目标数,用a[i]-a[0]/n,就保证最终目标数为0,
sum[i]=sum[i-1]+a[i];//从1到i每行或每列的前缀和
}
sort(sum+1,sum+1+n);
ll ans=0;
for(int i=1;i<=n;++i)ans+=abs(sum[i]-sum[(n+1)/2]);
return ans;
}
int main()
{
int n,m,k;
int u,v;
cin>>n>>m>>k;
for(int i=0;i<k;++i)
{
scanf("%d%d",&u,&v);
r[u]++;c[v]++;
//r[u]用来记录第u行的目标个数,同理c[v];
}
for(int i=1;i<=n;++i)r[0]+=r[i];//r[0]用来记录所有的目标个数
c[0]=r[0];//同理c[0]
if(r[0]%n==0&&c[0]%m==0)cout<<"both "<<f(r,n)+f(c,m)<<endl;
//当要上下移动目标位置的时候列上的目标数不会边,但行上的目标数变了
//但是单独先上下移动时列上的目标数不会变,故可以先单独移动行上的目标
else if(r[0]%n==0)cout<<"row "<<f(r,n)<<endl;
else if(c[0]%m==0)cout<<"column "<<f(c,m)<<endl;
else puts("impossible");
}
BZOJ3032//CODEVS2485 七夕祭 中位数的妙用 前缀和 数学思维
最新推荐文章于 2020-02-29 21:32:04 发布