题目大意:

对n个排成一排的物品涂色,有m种颜色可选。

要求相邻的物品颜色不相同,且总共恰好有K种颜色,问所有可行的方案数

分析:

从m种颜色中选出k种,有c(m,k)种方法,那么我们只用考虑 k种颜色的涂法即可

显然第一个物品有k种涂法,后面的因为不能跟前面的相同都只有k-1种涂法

因此容易想到一个公式:k*(k-1)^(n-1)

但是这个公式算的是 不超过k种颜色的涂法,题目要求必须k种,怎么办呢?

先考虑一个简化版的问题:

用而且用完5种颜色涂不相关的五个物品的方案数

用阶乘的方法可以算出 ans=120,换一种思路呢想一想这个问题,容易想到

ans(取五种颜色)=5^5(取不大于5种颜色)-c(5,4)*4^5(取不大于4种颜色)

可是一算发现ans竟然小于0了,这是怎么回事呢?容易发现其实取小于四种颜色的方案被减重复了

于是想到需要容斥

ans=c(5,5)*5^5-c(5,4)*4^5+c(5,3)*3^5-c(5,2)*2^5+c(5,1)*1^5 =120

这个问题解决了。原问题也就差不多了。。

代码:

#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
const long long mod=;
const long long ny=;
long long n,m,k;
long long cm[];
long long cn[];
long long ck[];
long long inv[];
long long mo(long long x)
{
while(x<)
x+=mod;
return x%mod;
}
long long exgcd(long long a,long long b,long long &x,long long &y)
{
if(a==&&b==) return -;
if(b==){x=;y=;return a;}
long long d=exgcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
long long Inv(long long a,long long n)
{
long long x,y;
long long d=exgcd(a,n,x,y);
if(d==) return (x%n+n)%n;
else return -;
}
long long quickmod(long long a,long long b,long long m) //a^b%m
{
long long res=;
while(b)
{
if(b&)
res=res*a%mod;
b>>=;
a=a*a%mod;
}
return res;
}
void ini()
{
cn[]=cm[]=;
memset(cm,,sizeof(cm));
cm[]=;
int tmp=min(m/,k);
for(int i=;i<=tmp;i++)
{
cm[i]=(cm[i-]*(m+-i)%mod*inv[i])%mod;
}
if(cm[k]==)
cm[k]=cm[m-k];
ck[]=ck[k]=;
for(int i=;i<=k/;i++)
{
ck[i]=(ck[i-]*(k+-i)%mod*inv[i])%mod;
ck[k-i]=ck[i];
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
inv[]=;
for(int i=;i<=;i++)
{
inv[i]=Inv(i,mod);
}
int t;
scanf("%d",&t);
int cas=;
while(t--)
{
cas++;
scanf("%I64d%I64d %I64d",&n,&m,&k);
ini();
long long ans=;
long long p=;
for(int i=k;i>=;i--)
{
ans=(ans+p*((ck[k-i])*i%mod*quickmod(i-,n-,mod)%mod)+mod)%mod;
p=-p;
}
ans=(ans*cm[k])%mod;
printf("Case #%d:%c%I64d\n",cas,' ',ans);
}
return ;
}

codeforces 100548F (西安现场赛F题):容斥原理的更多相关文章

  1. CF GYM100548 (相邻格子颜色不同的方案数 2014西安现场赛F题 容斥原理)

    n个格子排成一行,有m种颜色,问用恰好k种颜色进行染色,使得相邻格子颜色不同的方案数. integers n, m, k (1 ≤n, m ≤ 10^9, 1 ≤ k ≤ 10^6, k ≤ n, m ...

  2. 2014西安现场赛F题 UVALA 7040

    地址 题意:求在m种颜色中挑选k种颜色,给n个花朵涂色有几种方法. 分析:画图可以发现,基本的公式就是k ×(k-1)^(n-1).但这仅保证了相邻颜色不同,总颜色数不超过k种,并没有保证恰好出现k种 ...

  3. 华中邀请赛现场赛F题 Seats

    题目链接:http://acm.whu.edu.cn/land/problem/detail?problem_id=1552 解题报告:题目意思应该很清楚,就是有n个人,分别属于7个班级,然后他们坐成 ...

  4. 19秦皇岛现场赛F题 dfs

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6736 如果环的边长为k,那么环的删边方案数是2k-1.如果链的边长为k,那么链的删边方案数是2k.环的 ...

  5. 2013杭州现场赛B题-Rabbit Kingdom

    杭州现场赛的题.BFS+DFS #include <iostream> #include<cstdio> #include<cstring> #define inf ...

  6. 2013年山东省赛F题 Mountain Subsequences

    2013年山东省赛F题 Mountain Subsequences先说n^2做法,从第1个,(假设当前是第i个)到第i-1个位置上哪些比第i位的小,那也就意味着a[i]可以接在它后面,f1[i]表示从 ...

  7. ACM-ICPC 2019南昌网络赛F题 Megumi With String

    ACM-ICPC 南昌网络赛F题 Megumi With String 题目描述 给一个长度为\(l\)的字符串\(S\),和关于\(x\)的\(k\)次多项式\(G[x]\).当一个字符串\(str ...

  8. Gym101981D - 2018ACM-ICPC南京现场赛D题 Country Meow

    2018ACM-ICPC南京现场赛D题-Country Meow Problem D. Country Meow Input file: standard input Output file: sta ...

  9. HDU 4800/zoj 3735 Josephina and RPG 2013 长沙现场赛J题

    第一年参加现场赛,比赛的时候就A了这一道,基本全场都A的签到题竟然A不出来,结果题目重现的时候1A,好受打击 ORZ..... 题目链接:http://acm.hdu.edu.cn/showprobl ...

随机推荐

  1. Android ExpandableListView BaseExpandableListAdapter (类似QQ分组列表)

    分组列表视图(ExpandableListView) 和ListView不同的是它是一个两级的滚动列表视图,每一个组可以展开,显示一些子项,类似于QQ列表,这些项目来至于ExpandableListA ...

  2. 要缩小通过两个触摸点的观点(iOS)

    于AppDelegate.m档,创建一个视图控制器 #import "MAYAppDelegate.h" #import "MAYViewController.h&quo ...

  3. QTimerLine类学习

      QTimeLine类提供了控制动画的时间轴. 类型:enum CurveShape{EaseInCurve,EaseOutCurve,EaseInOutCurve,LinearCurve,Sine ...

  4. unity3d Find()使用

    1. Hierarchy 创建对象如两个cube时,未修改名称,名称都为cube时. js添加至Camera: private var cubeObj : GameObject; //private ...

  5. 去除jquery.min.map 404错误信息

    调试中出现了 jquery.min.map 404 (Not Found) 的js错误信息: 那么jquery.min.map到底是个什么呢? JQuery 官方解释 从 jQuery 1.9.0 版 ...

  6. Android面试,与Service交互方式

    五种交互方式,分别是:通过广播交互.通过共享文件交互.通过Messenger(信使)交互.通过自定义接口交互.通过AIDL交互.(可能更多) Service与Thread的区别 Thread:Thre ...

  7. Ajax提交Form表单及文件上传

    刚刚申请下来的博客,写得第一篇.有点小激动,本人以前是一名工业3D设计师突然有些变故做上了JavaWeb开发: 前几天,发现了一些小问题.我在写后台管理页面时,需要上传一张图片.于是我就用很普通的Fo ...

  8. Linux之make 、makefile的使用方法

    ◊make是什么? make是一个命令工具,是一个解释makefile中指令的命令工具.它可以简化编译过程里面所下达的指令,当执行 make 时,make 会在当前的目录下搜寻 Makefile (o ...

  9. 使用linux操作系统的公司服务器有哪些品牌

    服务器硬件是什么牌子的? 操心系统有哪些?cpu是哪些?

  10. 使用三层交换机的ACL实现不同vlan间的隔离

    使用三层交换机的ACL实现不同vlan间的隔离   建立三个vlan vlan10 vlan20 vlan30    www.2cto.com   PC1 PC3属于vlan10 PC2 PC4属于v ...