• bzoj1004 [HNOI2008]Cards


    题目

    http://www.lydsy.com/JudgeOnline/problem.php?id=1004

    题解

    emmmm.....................

    感觉这道题非常迷耶,根本不知道它想考什么,难度直逼强制在线的SB题

    数据保证 “任意多次洗牌都可用这 m种洗牌法中的一种代替,且对每种洗牌法,都存在一种洗牌法使得能回到原状态。” 那不就是说每种本质不同染色方法通过洗牌后一定会得到m种不曾出现的排列方式

    那么只要求出一共有多少种排列,再除以m+1,就能得到本质不同的染色方案数

    。。。唯一能算得上知识点的,应该就只有除以一个数取模等于乘以这个数的逆元取模

    这怕是我生平第一次不读完数据就A题

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <cmath> 
    #define ll long long
    using namespace std; 
    
    int Sr,Sb,Sg,n,m,p;
    ll ans,tmp;
    
    ll ksm(int x,int y)
    {
    	ll cnt=1;
    	while(y)
    	{
    		if(y&1) cnt=(cnt*x)%p;
    		x=(x*x)%p;y=y>>1; 
    	}
    	return cnt;
    }
    
    int main()
    {
    	scanf("%d%d%d%d%d",&Sr,&Sb,&Sg,&m,&p);
    	n=Sr+Sb+Sg;
    	tmp=1;
    	for(int i=1;i<=Sr;i++) tmp=tmp*(n-i+1)/i;
    	ans=tmp%p;tmp=1;n-=Sr;
    	for(int i=1;i<=Sb;i++) tmp=tmp*(n-i+1)/i;
    	ans=(ans*tmp)%p;tmp=1;n-=Sb;
    	for(int i=1;i<=Sg;i++) tmp=tmp*(n-i+1)/i;
    	ans=(ans*tmp)%p;
    	printf("%d",ans*ksm(m+1,p-2)%p);
    	return 0;
    }
  • 相关阅读:
    数据库乐观锁应用
    maven 引入本地jar
    GTS 分布式事务
    redis 做冥等
    服务器 启动命令
    pgAdmin4的应用
    PostgreSQL 分区
    压测工具
    BigDecimal 比较大小
    移动端px转化为rem
  • 原文地址:https://www.cnblogs.com/XYZinc/p/7374229.html
Copyright © 2020-2023  润新知