(每日一练28826)题目名称:小豚鼠搬家

文盲老顾
WEB应用领新星创作者
博客专家认证
2023-04-27 21:25:57

小艺酱买了一排排格子的小房子n*m,她想让k只小豚鼠每只小豚鼠都有自己的房子。 但是为了不浪费空间,她想要小房子的最外圈尽量每行每列都有一只小豚鼠居住(小豚鼠也可以住在中间的格子,只需保证房子最外围的行和列至少住一只豚鼠即可,无需每行每列都有豚鼠)。 小艺酱想知道自己有多少种方案安排小豚鼠。

嗯,这个题目必须上算法了,容斥原理啥的,如果懂的自然懂,不懂的可以看老顾的文章,反正老顾不懂。https://blog.csdn.net/superwfei/article/details/129041358

代码比较长,这里只给出 python 的代码了。

n,m,k = map(int,input().split())
def P(n):
    if n < 2:
        return 1
    return n * P(n - 1)
def C(m,n):
    return P(m) // P(m - n) // P(n)
total = 0

for i in range(16):
    idx = 0
    row = n
    col = m
    if i & 1: # 对应集合 A,最上边一行无小鼠
        col -= 1
        idx += 1
    if i & 2: # 对应集合 B,最下边一行无小鼠
        col -= 1
        idx += 1
    if i & 4: # 对应集合 C,最左边一列无小鼠
        row -= 1
        idx += 1
    if i & 8: # 对应集合 D,最右边一列无小鼠
        row -= 1
        idx += 1
    #print('i:',i,i&1,i&2,i&4,i&8,'idx:',idx,idx & 1,'row:{},col:{}'.format(row,col))
    if idx & 1:
        total -= int(C(row*col,k))
    else:
        total += int(C(row*col,k))
if k < 2 and m >1 and n >1:
    print(0)
else:
    print(total)
...全文
137 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

321

社区成员

发帖
与我相关
我的任务
社区描述
主要用于技术交流,包括但不限于 .net,mssql,js,css,python,算法,运维。也可以晒最新技术,美图,运动等。最后,如果有问题,可以提问,老顾能帮忙的会尽量帮忙哦。
前端sqlserverasp.net 技术论坛(原bbs) 北京·西城区
社区管理员
  • 文盲老顾
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧