题目
题目描述
七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。于是
F
r
e
n
c
h
B
r
e
a
d
I
n
n
\tt French\;Bread\;Inn
FrenchBreadInn(法国面包旅馆,简称
F
B
I
\tt FBI
FBI)今年举办了一次线下七夕祭。
L
L
T
\tt LLT
LLT 同学今年成功邀请到了
L
J
\tt LJ
LJ 同学陪他来共度七夕,于是他们决定去
F
B
I
\tt FBI
FBI 七夕祭游玩。
矩形的祭典会场由 N N N 排 M M M 列共计 N × M N×M N×M 个摊点组成。虽然摊点种类繁多,不过 L J \tt LJ LJ 只对其中的一部分摊点感兴趣,比如棋牌室、肥宅快乐屋、网咖……什么的。 L L T \tt LLT LLT 预先联系了七夕祭的负责人 S Y \tt SY SY ,希望能够通过恰当地布置会场,使得各行中 L J \tt LJ LJ 感兴趣的摊点数一样多,并且各列中 L J \tt LJ LJ 感兴趣的摊点数也一样多。
不过 S Y \tt SY SY 告诉 L L T \tt LLT LLT ,摊点已经随意布置完毕了,如果想满足 L J \tt LJ LJ 的要求,唯一的调整方式就是交换两个相邻的摊点。两个摊点相邻,当且仅当他们处在同一行或者同一列的相邻位置上。由于 L L T \tt LLT LLT 率领的天下所有衙门,成功地扭曲了空间,每一行或每一列的第一个位置和最后一个位置也算作相邻。现在 L L T \tt LLT LLT 想知道他的两个要求最多能满足多少个。在此前提下,至少需要交换多少次摊点。
输入格式
第一行包含三个整数
N
N
N 和
M
M
M 和
T
T
T 。
T
T
T 表示
L
J
\tt LJ
LJ 对多少个摊点感兴趣。
接下来 T T T 行,每行两个整数 x , y x,y x,y ,表示 L J \tt LJ LJ 对处在第 x x x 行第 y y y 列的摊点感兴趣。行列从 1 1 1 开始编号。
输出格式
首先输出一个字符串。如果能满足
L
L
T
\tt LLT
LLT 的全部两个要求,输出
b
o
t
h
\tt both
both ;如果通过调整只能使得各行中
L
J
\tt LJ
LJ 感兴趣的摊点数一样多,输出
r
o
w
\tt row
row ;如果只能使各列中
L
J
\tt LJ
LJ 感兴趣的摊点数一样多,输出
c
o
l
u
m
n
\tt column
column ;如果均不能满足,输出
i
m
p
o
s
s
i
b
l
e
\tt impossible
impossible 。
如果输出的字符串不是 i m p o s s i b l e \tt impossible impossible , 接下来输出最小交换次数,与字符串之间用一个空格隔开。
数据范围与约定
对于
30
%
30\%
30% 的数据,
N
,
M
≤
100
N, M≤100
N,M≤100 。
对于 70 % 70\% 70% 的数据, N , M ≤ 1000 N, M≤1000 N,M≤1000 。
对于 100 % 100\% 100% 的数据, 1 ≤ N , M ≤ 100000 , 0 ≤ T ≤ min ( N M , 100000 ) , 1 ≤ x ≤ N , 1 ≤ y ≤ M 1≤N, M≤100000,0≤T≤\min(NM, 100000),1≤x≤N,1≤y≤M 1≤N,M≤100000,0≤T≤min(NM,100000),1≤x≤N,1≤y≤M 。
思路
其实这个东西可以想象成 k k k 个点在地图里乱动。
能否
如果 n ∣ k n|k n∣k ,那么一定可以满足每行数量一样。
如果 m ∣ k m|k m∣k ,那么一定可以满足每列数量一样。
行和列是独立的。所以,如果 n ∣ k ∧ m ∣ k n|k\wedge m|k n∣k∧m∣k ,那么两个都可以满足。
怎么证明?从题目中可以发现,不存在“既可以 r o w \tt row row ,也可以 c o l u m n \tt column column ,就是不能 b o t h \tt both both”的情况。
好吧,追求严谨,就得通过下面的操作来证明。
最小操作次数
前置知识:请先看糖果传递的做法。
行和列分开讨论。
所以此时就是这样一个问题:对于一个序列 { a } \{a\} {a} ,每次可以将 a i a_i ai 减去(加上)一,将 a i + 1 a_{i+1} ai+1 加上(减去)一,代价为 1 1 1 。求全部相同的最小代价。
为什么是一样的呢?因为 a i > a i + 1 a_i>a_{i+1} ai>ai+1 时,第 i i i 行一定至少有 a i − a i + 1 a_i-a_{i+1} ai−ai+1 个点是可以直接移动到第 i + 1 i+1 i+1 行(而不需要改变列的编号)的。
目标是全部相同,自然是较大者移动至较小者。
所以就可以了。显然,行和列互不影响。
代码
这么简单的代码,还需要我教你吗?