地址

题意:求在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的更多相关文章

  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. codeforces 100548F (西安现场赛F题):容斥原理

    题目大意: 对n个排成一排的物品涂色,有m种颜色可选. 要求相邻的物品颜色不相同,且总共恰好有K种颜色,问所有可行的方案数 分析: 从m种颜色中选出k种,有c(m,k)种方法,那么我们只用考虑 k种颜 ...

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

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

  4. hdu 5071(2014鞍山现场赛B题,大模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 思路:模拟题,没啥可说的,移动的时候需要注意top的变化. #include <iostr ...

  5. zoj 3820(2014牡丹江现场赛B题)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5374 思路:题目的意思是求树上的两点,使得树上其余的点到其中一个点的 ...

  6. 2014鞍山现场赛C题HDU5072(素筛+容斥原理)

    Coprime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total ...

  7. ACM学习历程——HDU5017 Ellipsoid(模拟退火)(2014西安网赛K题)

    ---恢复内容开始--- Description Given a 3-dimension ellipsoid(椭球面) your task is to find the minimal distanc ...

  8. 2014牡丹江 现场赛 F zoj 3824 Fiber-optic Network

    首先赞一下题目, 好题 题意: Marjar University has decided to upgrade the infrastructure of school intranet by us ...

  9. hdu 5078 2014鞍山现场赛 水题

    http://acm.hdu.edu.cn/showproblem.php?pid=5078 现场最水的一道题 连排序都不用,由于说了ti<ti+1 //#pragma comment(link ...

随机推荐

  1. jquery 跨域访问问题 转

    http://zld406504302.iteye.com/blog/1677937 服务器,jsp <%@ page language="java" contentType ...

  2. 精析AngularJS(一)

    AngularJS简介 四个核心思想:依赖注入.模块化.双向绑定.语义化标签. AngularJS 前端 MVC 的设计与搭建 MVC(Model View Controller)模型(model)- ...

  3. centos mongodb cluster install 完全版

    分享一则用yum安装的mongodb初始化脚本. install_mongodb.sh会安装mongodb所需的基本环境. 配置副本集的时候会需要辅助文件hosts.conf. 说明:该示例为一主一丛 ...

  4. PHPExcel读取Excel文件的实现代码

    <?php require_once 'PHPExcel.php'; /**对excel里的日期进行格式转化*/ function GetData($val){ $jd = GregorianT ...

  5. 给返回的injector增加了一个invoke方法

    我们知道,这里swap只需交换指针指向就可以,所以我们可以写出如下自定义版本的swap函数: 首先,它把一个独立的文件看成一个模块,比如上面的 hello.js 文件,就可以当成一个模块.模块的名称就 ...

  6. hdu, KMP algorithm, linear string search algorithm, a nice reference provided 分类: hdoj 2015-07-18 13:40 144人阅读 评论(0) 收藏

    reference: Rabin-Karp and Knuth-Morris-Pratt Algorithms By TheLlama– TopCoder Member https://www.top ...

  7. 第一篇:初识bootstrap

    Bootstrap是一款目前非常流行的前端框架,简单的说,就是html,css,javascript的工具集,我们可以用bootstrap搭建出简洁,清新的网站或软件界面,有了bootstrap这个利 ...

  8. Android深度探索(卷1)HAL与驱动开发

    第一章 介绍Android驱动开发和移植技术 主要对android和linux做了总体的介绍,让我们有了个感性的认识. 一.Android的四层系统架构: a) Linux内核:Android是基于L ...

  9. 循序渐进redis(一) —— redis的安装及可视化工具的使用

    1.安装 注意事项: 1.安装gcc 2.编译带参数: make MALLOC=libc 2.可视化客户端工具 推荐使用RedisClient,提供了基本的CRUD以及过期设置等操作的图形化接口,在项 ...

  10. It will affect staff as well.

    Premier Foods has reduced its number of suppliers dramatically in the last 12 months. In 2013 it mad ...