C. Qualification Rounds

组合问题:问给三种颜色的岛,同种颜色不能相连,且建成后同种颜色的岛屿之间最短距离不能小于3?数据量在5000左右
由于每种颜色自己和自己不能相连,所以只能和外面颜色相连,只要保证每个岛不会同时和两个颜色一样的岛屿相连就可以了,所以可以转化成每两种颜色的岛屿相连的方案数,然后再乘起来就行了。
每两种颜色的岛屿相连的方案数用组合数就能求出来:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def cal(x, n):
    ans = 1
    sum1 = x
    while n > 0:
        if n&1:
            ans = (ans * sum1)%MON
        n >>= 1
        sum1 = (sum1 * sum1)%MON
MON = 998244353
N = 5000+20

def pecal():
    fact[0] = 1
    rfact[0] = 1
    for i in range(1,N):
        fact[i] = (fact[i-1]*i)%MON
        rfact[i] = pow(fact[i], MON-2, MON)
    return None

def cal(a, i):
    return (((fact[a] * rfact[a-i]) % MON) *rfact[i]) % MON

def solve(x, y):
    ans = 0
    k = min(x, y)
    for i in range(k+1):
        ans += (cal(x, i) * cal(y, i) % MON) * fact[i] % MON
    return ans


a,b,c = map(int, input().split(' '))
fact = [0]*N
rfact = [0]*N
pecal()

ans = (solve(a, b) * solve(a, c) % MON)* solve(b, c) % MON
print(ans)

还有更加简洁的写法如下:

a, b, c = map(int, input().split())
M = 998244353
def calc(a, b) :
    if a > b:
        a, b = b, a
    ans = 0
    t = 1
    for i in range(a + 1):
        ans = (ans + t) % M
        t = t * (a - i) * (b - i) * pow(i + 1, M - 2, M) % M
    return ans
ans = calc(a, b) * calc(b, c) * calc(a, c) % M
print(ans)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值