Wannafly挑战赛13 zzf的好矩阵 题解 答案解释

25 篇文章 0 订阅
22 篇文章 0 订阅

Wannafly挑战赛13 zzf的好矩阵 题解


链接: https://ac.nowcoder.com/acm/contest/80/C

分析

  1. 每个格子都有至少一个麦穗
  2. 每个格子最多只能有p*p个麦穗
  3. 任意两个格子的麦穗数不同

结论1

由以上三点易得所有格子的麦穗数为 p 2 p^2 p2的全排列。

结论2

对于一个已知的一个符合题意的矩阵,行任意交换,列任意交换,或者所有行列进行转置,所得的矩阵仍然是一个符合条件的解。易得,如此一个基本解可以构造出 2 ∗ ( p ! ) 2 2*(p!)^2 2(p!)2个互不相同的解。


转置乘以2.行的顺序有 p ! p! p!种,列的顺序有 p ! p! p!种。

结论3

不考虑转置、行列交换等变换,本质不同的解有且只有一个。
以下主要是从不重不漏出发,逐步逼近,找到C(带子)需要满足的条件,最终确定可行的c与r.


r i , c j , a i , j r_i,c_j,a_{i,j} ri,cj,ai,j分别表示第 i i i行选中的次数、第 j j j列选中的次数, i i i j j j列的麦穗数。
a i , j = r i + c j a_{i,j}=r_i+c_j ai,j=ri+cj.
r = ( r 1 , r 2 , r 3 , . . . , r p ) r=(r_1,r_2,r_3,...,r_p) r=(r1,r2,r3,...,rp)
c = ( c 1 , c 2 , c 3 , . . . , c p ) c=(c_1,c_2,c_3,...,c_p) c=(c1,c2,c3,...,cp).
对于麦穗数为1的格子,显然只能分解成 1 + 0 1+0 1+0或者 0 + 1 0+1 0+1.
为了本质不同的解,我们不妨设行和列的选取数从小到大,且第一列取1,第一行取0.即:
r 1 &lt; r 2 &lt; r 3 &lt; . . . &lt; r p ; c 1 &lt; c 2 &lt; c 3 &lt; . . . &lt; c p ; c 1 = 1 , &ThickSpace; r 1 = 0. r_1 \lt r_2 \lt r_3 \lt ... \lt r_p;\\ c_1 \lt c_2 \lt c_3 \lt ... \lt c_p; \\ c_1 = 1,\;r_1=0. r1<r2<r3<...<rp;c1<c2<c3<...<cp;c1=1,r1=0.
如此,确定一对 r , c r,c r,c就确定了一个基本的解。
容易验证 c = ( 1 , 2 , 3 , 4 , . . . , p ) , r = ( 0 , p , 2 p , 3 p , . . . , ( p − 1 ) p ) c=\left(1,2,3,4,...,p\right), r=\left(0,p,2p,3p,...,(p-1)p\right) c=(1,2,3,4,...,p),r=(0,p,2p,3p,...,(p1)p)是一个解。
接下来要说明只有这一组基本解。


C数组对应带子说明

[外链图片转存失败(img-eStl3jQm-1564080039300)(C_001.jpg)]

空白长度论述

不断移动C数组锁画出的这条带子,注意需要满足以下两点要求:

  1. 1 - p 2 1\text{-}p^2 1-p2的中每一个格子都被黑色覆盖一次且仅一次(即不重不漏)。
  2. r i r_i ri其实就是第 i i i次移动相比于初始位置的总的位移量。
  3. 为了不漏,移动之后,下一次带子的开头应对应于还没覆盖的第一个空白格子。
    根据不重不漏,容易推出以下结论。
    [外链图片转存失败(img-tzNx6iH0-1564080039306)(C_004.jpg)]
    l 白 = k l l_{白}=kl l=kl
后续黑色长度论述

[外链图片转存失败(img-hI9rqGmP-1564080039307)(C_003.jpg)]
l ′ = l l^{&#x27;}=l l=l
并且用不重不漏容易推出如果后面还有白色段,则长度一定和前面的白色段等长,再有黑色段,则又和最开始的黑色段等长……

能“密铺”的带子形式及特征

[外链图片转存失败(img-zKwh5icB-1564080039310)(C_006.png)]
其中 l 黑 = l , l 白 = k l l_{黑}=l,l_{白}=kl l=l,l=kl
共有 k 1 k_1 k1kl白+l黑片段。
带子移动k次,加上原本的不移动的一条,则刚好不重不漏的“密铺”了连续的一段。之后只需要按照前面的整体右移即可。
下图是k=3的例子:
[外链图片转存失败(img-NZtvEEox-1564080039312)(C_007.png)]
带子黑色总长度:
p = ( k 1 + 1 ) l p=(k_1+1)l p=(k1+1)l
“密铺”一段长度:
l + k 1 ( k l + l ) + k l = k 1 k l + ( k + k 1 + 1 ) l l+k_1(kl+l)+kl=k_1kl+(k+k_1+1)l l+k1(kl+l)+kl=k1kl+(k+k1+1)l
由于 p p p是素数。

  1. k 1 = 0 , l = p k_1 = 0,l=p k1=0,l=p,则带子只有第一块黑色的片段,长度为p,故 c = ( 1 , 2 , 3 , . . . , p ) c=(1,2,3,...,p) c=(1,2,3,...,p),显然要密铺满 1 − p 2 1-p^2 1p2可得 r = ( 0 , p , 2 p , 3 p , . . . , ( p − 1 ) p ) r=(0,p,2p,3p,...,(p-1)p) r=(0,p,2p,3p,...,(p1)p).或者
  2. k 1 = p − 1 , l = 1 k_1 = p-1,l=1 k1=p1,l=1,则带子有 p p p块黑色的片段,每两个黑色片段之间有一块长度为 k k k的白色片段。密铺总长度应该是 p 2 p^2 p2的因数。
    p 2 = k 2 [ k 1 k l + ( k + k 1 + 1 ) l ] = k 2 [ ( p − 1 ) k + ( k + p ) ] = k 2 ( k + 1 ) p ⇒ p = k 2 ( k + 1 ) p^2=k_2\left[k_1kl+(k+k_1+1)l\right]\\=k_2\left[(p-1)k+(k+p)\right]\\=k_2(k+1)p \Rightarrow\\ p=k_2(k+1) p2=k2[k1kl+(k+k1+1)l]=k2[(p1)k+(k+p)]=k2(k+1)pp=k2(k+1)

    2.a. k 2 = 1 , k = p − 1 k_2=1,k=p-1 k2=1,k=p1
    2.b. k 2 = p , k = 0 k_2=p,k=0 k2=p,k=0
    对于2.a可得 c = ( 1 , p + 1 , 2 p + 1 , . . . , ( p − 1 ) p + 1 ) , r = ( 0 , 1 , 2 , 3 , 4 , . . . , p − 1 ) c=(1,p+1,2p+1,...,(p-1)p+1), r=(0,1,2,3,4,...,p-1) c=(1,p+1,2p+1,...,(p1)p+1),r=(0,1,2,3,4,...,p1)
    对于2.b可得 c = ( 1 , 2 , 3 , 4 , . . . , p ) , r = ( 0 , p , 2 p , 3 p , . . . , ( p − 1 ) p ) c=(1,2,3,4,...,p),r=(0,p,2p,3p,...,(p-1)p) c=(1,2,3,4,...,p),r=(0,p,2p,3p,...,(p1)p)

综上1,2.a,2.b
c α = ( 1 , 2 , 3 , 4 , . . . , p ) , &ThickSpace; r α = ( 0 , p , 2 p , 3 p , . . . , ( p − 1 ) p ) ; c β = ( 1 , p + 1 , 2 p + 1 , . . . , ( p − 1 ) p + 1 ) , &ThickSpace; r β = ( 0 , 1 , 2 , 3 , 4 , . . . , p − 1 ) c_{\alpha}=(1,2,3,4,...,p),\;r_{\alpha}=(0,p,2p,3p,...,(p-1)p);\\ c_{\beta}=(1,p+1,2p+1,...,(p-1)p+1),\; r_{\beta}=(0,1,2,3,4,...,p-1) cα=(1,2,3,4,...,p),rα=(0,p,2p,3p,...,(p1)p);cβ=(1,p+1,2p+1,...,(p1)p+1),rβ=(0,1,2,3,4,...,p1)
但是,容易发现, ∀ i , j \forall i,j i,j,有
a α , i , j = r α , i + c α , j = [ ( i − 1 ) p ] + [ j ] = ( i − 1 ) p + j = a β , j , i = r β , j + c β , i = [ j − 1 ] + [ ( i − 1 ) p + 1 ] = ( i − 1 ) p + j a_{\alpha,i,j}=r_{\alpha,i}+c_{\alpha,j}=[(i-1)p]+[j]=(i-1)p+j\\ =a_{\beta,j,i}=r_{\beta,j}+c_{\beta,i}=[j-1]+[(i-1)p+1]=(i-1)p+j aα,i,j=rα,i+cα,j=[(i1)p]+[j]=(i1)p+j=aβ,j,i=rβ,j+cβ,i=[j1]+[(i1)p+1]=(i1)p+j
α , β \alpha,\beta α,β这两种方案所得矩阵互为转置矩阵。所以应计算成一种基本解。

最终结论

因此,本质不同的解只有一种;考虑矩阵转置、行列交换等,一共有 2 ∗ ( p ! ) 2 2*(p!)^2 2(p!)2种解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值