2014西安现场赛F题 UVALA 7040
题意:求在m种颜色中挑选k种颜色,给n个花朵涂色有几种方法。
分析:画图可以发现,基本的公式就是k ×(k-1)^(n-1)。但这仅保证了相邻颜色不同,总颜色数不超过k种,并没有保证恰好出现k种颜色;接着就是一个容斥问题,上述计算方法中包含了只含有2、3、…、(k-1)种颜色的情况,需要通过容斥原理去除。假设出现p (2 <= p <= k-1)种颜色,从k种颜色中选取p种进行涂色,方案数为C(k,p) × p × (p-1)^(n-1) ;总的方案数就是C(m,k) × ( k × (k-1)^(n-1) + ∑((-1)^p × C(k, p) × p × (p-1)^(n-1) )。
图示法:

一共8种情况,但是有两种是只有两种颜色的,需要减掉。
TLE 原因:1)逆元没有打表;2)参数传多余了,本来MOD是全局变量,但是模板上有这一项,就当参数传上了,结果就TLE了。
这是我们去年在西安现场比赛的时候做的题目,就卡在这道题目里,一直TLE了,始终没能改过来,今天题目重现了一次,仍旧TLE。。。。。。可见学新知识的时候一点也不扎实。
#include <cstdio>
#include <iostream>
#include <sstream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
#define ll long long
#define _cle(m, a) memset(m, a, sizeof(m))
#define repu(i, a, b) for(int i = a; i < b; i++)
#define repd(i, a, b) for(int i = b; i >= a; i--)
#define sfi(n) scanf("%d", &n)
#define pfi(n) printf("%d\n", n)
#define sfi2(n, m) scanf("%d%d", &n, &m)
#define pfi2(n, m) printf("%d %d\n", n, m)
#define pfi3(a, b, c) printf("%d %d %d\n", a, b, c)
#define MAXN 1000005
#define MOD 1000000007
const int INF = 0x3f3f3f3f;
ll inv[MAXN];
ll quickpow(ll m, ll n)
{
ll ans = ;
while(n)
{
if(n & )///如果n是奇数
ans = (ans * m) % MOD;
n = n >> ;///位运算“右移1类似除2”
m = (m * m) % MOD;
}
return ans;
}
ll C(ll n, ll m)
{
if(m > n) return ;
ll ans = ;
for(int i = ; i <= m; i++)
{
ll a = (n - m + i) % MOD;
ll b = i % MOD;
ans = ans * (a * quickpow(b, MOD - ) % MOD) % MOD;
}
return ans;
}
ll Lucas(ll n, ll m)
{
if(m == ) return ;
else
return (C(n % MOD, m % MOD) * Lucas(n / MOD, m / MOD)) % MOD;
}
void get()
{
repu(i, , MAXN)
inv[i] = quickpow(i, MOD - );
}
ll cc[];
int main()
{
get();
int T;
sfi(T);
int kase = ;
ll n, m, k;
while(T--)
{
scanf("%lld%lld%lld", &n, &m, &k);
if(k==)
{
printf("Case #%d: ",kase++);
if(n==)printf("%d\n",m);
else printf("0\n");
continue ;
}
ll cmk = Lucas(m, k);
ll t = quickpow(k - , n - );
t = (t * k) % MOD;
int flag = ;
ll cc = ;
for(ll p = k - ; p >= ; p--)
{
cc = (((cc * (p + )) % MOD) * inv[k - p]) % MOD;
///手残多加了个MOD也是会TLE的。。。。
ll q = (((cc * p) % MOD) * quickpow(p - , n - )) % MOD;
if(flag) t = (t + q) % MOD;
else t = (t - q + MOD) % MOD;
flag = !flag;
}
printf("Case #%d: %lld\n", kase++, (t * cmk) % MOD);
}
return ;
}
2014西安现场赛F题 UVALA 7040的更多相关文章
- CF GYM100548 (相邻格子颜色不同的方案数 2014西安现场赛F题 容斥原理)
n个格子排成一行,有m种颜色,问用恰好k种颜色进行染色,使得相邻格子颜色不同的方案数. integers n, m, k (1 ≤n, m ≤ 10^9, 1 ≤ k ≤ 10^6, k ≤ n, m ...
- codeforces 100548F (西安现场赛F题):容斥原理
题目大意: 对n个排成一排的物品涂色,有m种颜色可选. 要求相邻的物品颜色不相同,且总共恰好有K种颜色,问所有可行的方案数 分析: 从m种颜色中选出k种,有c(m,k)种方法,那么我们只用考虑 k种颜 ...
- 华中邀请赛现场赛F题 Seats
题目链接:http://acm.whu.edu.cn/land/problem/detail?problem_id=1552 解题报告:题目意思应该很清楚,就是有n个人,分别属于7个班级,然后他们坐成 ...
- hdu 5071(2014鞍山现场赛B题,大模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 思路:模拟题,没啥可说的,移动的时候需要注意top的变化. #include <iostr ...
- zoj 3820(2014牡丹江现场赛B题)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5374 思路:题目的意思是求树上的两点,使得树上其余的点到其中一个点的 ...
- 2014鞍山现场赛C题HDU5072(素筛+容斥原理)
Coprime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total ...
- ACM学习历程——HDU5017 Ellipsoid(模拟退火)(2014西安网赛K题)
---恢复内容开始--- Description Given a 3-dimension ellipsoid(椭球面) your task is to find the minimal distanc ...
- 2014牡丹江 现场赛 F zoj 3824 Fiber-optic Network
首先赞一下题目, 好题 题意: Marjar University has decided to upgrade the infrastructure of school intranet by us ...
- hdu 5078 2014鞍山现场赛 水题
http://acm.hdu.edu.cn/showproblem.php?pid=5078 现场最水的一道题 连排序都不用,由于说了ti<ti+1 //#pragma comment(link ...
随机推荐
- 转载:[AngularJS系列] 那伤不起的provider们啊~ (Provider, Value, Constant, Service, Factory, Decorator)
来源:http://hellobug.github.io/blog/angularjs-providers/ 用AngularJS做项目,但凡用过什么service啊,factory啊,provide ...
- HTML <div> 标签
定义和用法: <div> 可定义文档中的分区或节(division/section). <div> 标签可以把文档分割为独立的.不同的部分.它可以用作严格的组织工具,并且不使用 ...
- 工作需求----表单多选框checkbox交互
关于多选框,反选及选取几个: 1.html内容 <!--begin checkbox--> <div class="c_n_manage_tablexx"> ...
- 课堂作业二 PAT1025 反转链表
MyGitHub 终于~奔溃了无数次后,看到这个结果 ,感动得不要不要的::>_<:: 题目在这里 题目简述:该题可大致分为 输入链表 -> 链表节点反转 -> 两个步骤 输入 ...
- Python:dict用法
dict全称dictionary,使用键-值(key-value)存储,有极快的查找速度. 以下整理几种常用的dict用法 定义 空dict >>> dict={} 普通dict & ...
- Tomcat 启动项目报错 java.lang.OutOfMemoryError: Java heap space
近日使用myeclipse 部署web项目,启动tomcat时报错: SEVERE: Error waiting for multi-thread deployment of directories ...
- Linux 设备驱动程序 proc
不能再简化了 #include<linux/module.h> #include<linux/init.h> #include<linux/proc_fs.h> i ...
- Python future模块
今天看到了Pyhon中的模块__future__,查了一下资料,感觉这个module很有用. 从python2.1开始以后, 当一个新的语言特性首次出现在发行版中时候, 如果该新特性与以前旧版本pyt ...
- AndroidManifest.xml file missing!
1.点击菜单栏中的Project——>Clean一下. 2.把AndroidManifest.xml文件再保存一下就可以了.
- 使用Javascript中变量的setter属性
在讲JDK的动态代理方法之前,不妨先想想如果让你来实现一个可以任意类的任意方法的代理类,该怎么实现?有个很naive的做法,通过反射获得Class和Method,再调用该方法,并且实现一些代理的方法. ...