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

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

分析

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

结论1

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

结论2

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


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

结论3

不考虑转置、行列交换等变换,本质不同的解有且只有一个。

以下主要是从不重不漏出发,逐步逼近,找到C(带子)需要满足的条件,最终确定可行的c与r.


用ri,cj,ai,jr_i,c_j,a_{i,j}ri​,cj​,ai,j​分别表示第iii行选中的次数、第jjj列选中的次数,iii行jjj列的麦穗数。

ai,j=ri+cja_{i,j}=r_i+c_jai,j​=ri​+cj​.

r=(r1,r2,r3,...,rp)r=(r_1,r_2,r_3,...,r_p)r=(r1​,r2​,r3​,...,rp​)

c=(c1,c2,c3,...,cp)c=(c_1,c_2,c_3,...,c_p)c=(c1​,c2​,c3​,...,cp​).

对于麦穗数为1的格子,显然只能分解成1+01+01+0或者0+10+10+1.

为了本质不同的解,我们不妨设行和列的选取数从小到大,且第一列取1,第一行取0.即:

r1<r2<r3<...<rp;c1<c2<c3<...<cp;c1=1,  r1=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,cr,cr,c就确定了一个基本的解。

容易验证c=(1,2,3,4,...,p),r=(0,p,2p,3p,...,(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,...,(p−1)p)是一个解。

接下来要说明只有这一组基本解。


C数组对应带子说明

空白长度论述

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

  1. 1-p21\text{-}p^21-p2的中每一个格子都被黑色覆盖一次且仅一次(即不重不漏)。
  2. rir_iri​其实就是第iii次移动相比于初始位置的总的位移量。
  3. 为了不漏,移动之后,下一次带子的开头应对应于还没覆盖的第一个空白格子。

    根据不重不漏,容易推出以下结论。



    l白=kll_{白}=kll白​=kl

后续黑色长度论述



l′=ll^{'}=ll′=l

并且用不重不漏容易推出如果后面还有白色段,则长度一定和前面的白色段等长,再有黑色段,则又和最开始的黑色段等长……

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



其中l黑=l,l白=kll_{黑}=l,l_{白}=kll黑​=l,l白​=kl

共有k1k_1k1​个kl白+l黑片段。

带子移动k次,加上原本的不移动的一条,则刚好不重不漏的“密铺”了连续的一段。之后只需要按照前面的整体右移即可。

下图是k=3的例子:



带子黑色总长度:

p=(k1+1)lp=(k_1+1)lp=(k1​+1)l

“密铺”一段长度:

l+k1(kl+l)+kl=k1kl+(k+k1+1)ll+k_1(kl+l)+kl=k_1kl+(k+k_1+1)ll+k1​(kl+l)+kl=k1​kl+(k+k1​+1)l

由于ppp是素数。

  1. k1=0,l=pk_1 = 0,l=pk1​=0,l=p,则带子只有第一块黑色的片段,长度为p,故c=(1,2,3,...,p)c=(1,2,3,...,p)c=(1,2,3,...,p),显然要密铺满1−p21-p^21−p2可得r=(0,p,2p,3p,...,(p−1)p)r=(0,p,2p,3p,...,(p-1)p)r=(0,p,2p,3p,...,(p−1)p).或者
  2. k1=p−1,l=1k_1 = p-1,l=1k1​=p−1,l=1,则带子有ppp块黑色的片段,每两个黑色片段之间有一块长度为kkk的白色片段。密铺总长度应该是p2p^2p2的因数。

    p2=k2[k1kl+(k+k1+1)l]=k2[(p−1)k+(k+p)]=k2(k+1)p⇒p=k2(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​[k1​kl+(k+k1​+1)l]=k2​[(p−1)k+(k+p)]=k2​(k+1)p⇒p=k2​(k+1)



    2.a. k2=1,k=p−1k_2=1,k=p-1k2​=1,k=p−1或

    2.b. k2=p,k=0k_2=p,k=0k2​=p,k=0

    对于2.a可得c=(1,p+1,2p+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,...,(p−1)p+1),r=(0,1,2,3,4,...,p−1)

    对于2.b可得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,...,(p-1)p)c=(1,2,3,4,...,p),r=(0,p,2p,3p,...,(p−1)p)

综上1,2.a,2.b

cα=(1,2,3,4,...,p),&ThickSpace;rα=(0,p,2p,3p,...,(p−1)p);cβ=(1,p+1,2p+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,...,(p−1)p);cβ​=(1,p+1,2p+1,...,(p−1)p+1),rβ​=(0,1,2,3,4,...,p−1)

但是,容易发现,∀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+ja_{\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+jaα,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

即α,β\alpha,\betaα,β这两种方案所得矩阵互为转置矩阵。所以应计算成一种基本解。

最终结论

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

Wannafly挑战赛13 zzf的好矩阵 题解 答案解释的更多相关文章

  1. 【瓜分5000元奖金】Wannafly挑战赛13

    链接:https://www.nowcoder.com/acm/contest/80/A来源:牛客网 zzy的小号 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...

  2. Wannafly挑战赛13 C:zzf的好矩阵(思维)

    题目描述 一个8 * 8的棋盘,第一个格子放1个麦穗,第二个格子放2个麦穗,第三个格子放4个麦穗……那么最后,共要放几个麦穗呢? zzf表示这个问题实在太简单,于是重新规定了游戏的规则. 初始的棋盘为 ...

  3. Wannafly挑战赛13 B:Jxc军训(逆元)

    题目描述 在文某路学车中学高一新生军训中,Jxc正站在太阳下站着军姿,对于这样的酷热的阳光,Jxc 表示非常不爽. Jxc将天空看做一个n*n的矩阵,此时天上有m朵云,这些云会随机分布在m个不同的位置 ...

  4. Wannafly挑战赛13 D.applese的生日(贪心+思维)

    题目描述 最可爱的applese生日啦,他准备了许多个质量不同的蛋糕,想请一些同学来参加他的派对为他庆生,为了不让一部分同学感到不爽,他决定把每个蛋糕都分割成几份(也可以不分割),使得最小的蛋糕的质量 ...

  5. Wannafly挑战赛23F-计数【原根,矩阵树定理,拉格朗日插值】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/161/F 题目大意 给出\(n\)个点的一张图,求它的所有生成树中权值和为\(k\)的倍数的个数.输出答案对\ ...

  6. Wannafly 挑战赛 19 参考题解

    这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...

  7. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  8. Wannafly挑战赛21A

    题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...

  9. 【Wannafly挑战赛4】F 线路规划 倍增+Kruskal+归并

    [Wannafly挑战赛4]F 线路规划 题目描述 Q国的监察院是一个神秘的组织.这个组织掌握了整个帝国的地下力量,监察着Q国的每一个人.监察院一共有N个成员,每一个成员都有且仅有1个直接上司,而他只 ...

随机推荐

  1. Codeforces_456_A

    http://codeforces.com/problemset/problem/456/A 按价格排序,比较质量. #include<cstdio> #include<algori ...

  2. WebAPI 微信小程序的授权登录以及实现

    这个星期最开始 ,老大扔了2个任务过来,这个是其中之一.下面直接说步骤: 1.  查阅微信开发文档  https://developers.weixin.qq.com/miniprogram/dev/ ...

  3. Wannafly挑战赛5 A珂朵莉与宇宙 前缀和+枚举平方数

    Wannafly挑战赛5 A珂朵莉与宇宙 前缀和+枚举平方数 题目描述 给你一个长为n的序列a,有n*(n+1)/2个子区间,问这些子区间里面和为完全平方数的子区间个数 输入描述: 第一行一个数n 第 ...

  4. Python 高级网络操作 - Python Advanced Network Operations

    Python 高级网络操作 - Python Advanced Network Operations Half Open Socket, 一个单向的 socket 被称为 half open sock ...

  5. MongoDB 复本集搭建

    复制集的特点   数据一致性 主是唯一的,但不是固定的  没有MySQL那样的双主结构 大多数原则,集群存活节点小于等于二分之一时集群不可写,只可读. 是否能选举出新的主节点,是由当前复制集成员存活量 ...

  6. pinpoint 修改hbase表TTL值

    操作步骤 查找出数据大的hbase表 root@990fb5560f64:/opt/hbase/hbase-# ls CHANGES.txt LICENSE.txt README.txt conf h ...

  7. 微信小程序仿朋友圈功能开发(发布、点赞、评论等功能)

    微信小程序仿朋友圈功能开发(发布.点赞.评论等功能) 1.项目分析 项目整体分为三个部分 发布 展示 详情页 graph LR 朋友圈发布 --内容发布--> 内容展示 内容展示 --点击展示卡 ...

  8. 珠峰-node

    ##### 文件流的读写. ##### 文件流对pipe的封装. ####

  9. C++泛化单链表

    泛型单链表 单链表将每个数据分为节点,每个节点存储数据和指向下一个节点的指针.这样数据就不用在内存中使用连续的存储空间,有更大的灵活性. 这里将单链表分为节点类(Node)和链表类(singleLin ...

  10. Javaweb项目中修改表单时数据回显方法

    1.前言 先来说下什么是数据回显,比如我要修改我的个人信息,点击修改按钮后进入修改界面,在这个界面中直接将原来的信息显示在表单中,而不是空表单,这就是数据回显 2.思路 当点击修改的时候,从数据库中查 ...