【agc002f】Leftmost Ball
题目大意
有n种颜色,每种k个球。将这些球任意排列,将每种颜色中最前面的一个求涂成白色(就是n+1种颜色),求最终的排列的方案的个数。
解题思路
考虑如何计算不会算重,
按颜色顺序,每次往排列插入k个球,k-1个某种颜色,以及一个白球。
那么只要我们每次插入k个球时,保证白球一定在之前插入的白球的后面,并且某种颜色的第一个球,放在上一次的颜色的第一个球的后面,就可以保证不会算重,最后再乘个n!。
但是正着不好做,于是反过来插入,先插的n种颜色,dp一下,设f[i][j]表示放到第i种颜色,前面有j+1个白球(为啥是j+1?其实只是为了方便)。
#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
#include <bitset>
#include <set>
const int maxlongint=2147483647;
const long long mo=1e9+7;
const int N=2005;
using namespace std;
int n,k;
long long f[N][N],jc[N*N],ny[N*N],ans;
long long poww(long long x,int y)
{
long long s=1;
for(;y;y>>=1,x=x*x%mo)
if(y&1) s=s*x%mo;
return s;
}
long long C(int m,int n)
{
if(n>m) return 0;
return jc[m]*ny[n]%mo*ny[m-n]%mo;
}
int main()
{
scanf("%d%d",&n,&k);
if(k<=1)
{
printf("1\n");
return 0;
}
jc[0]=ny[0]=1;
for(int i=1;i<=n*k;i++) jc[i]=jc[i-1]*i%mo,ny[i]=poww(jc[i],mo-2);
f[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=i;j>=0;j--)
f[i][j]=(f[i][j]+f[i-1][j-1]*C(k*i-j-1,k-2)%mo+f[i][j+1])%mo;
printf("%lld",f[n][0]*jc[n]%mo);
}
【agc002f】Leftmost Ball的更多相关文章
- 【agc002f】Leftmost Ball(动态规划)
[agc002f]Leftmost Ball(动态规划) 题面 atcoder 洛谷 题解 我们从前往后依次把每个颜色按顺序来放,那么如果当前放的是某种颜色的第一个球,那么放的就会变成\(0\)号颜色 ...
- 【AGC002F】Leftmost Ball DP 数学
题目大意 有\(n\)种颜色的球,每种\(m\)个.现在zjt把这\(nm\)个球排成一排,然后把每种颜色的最左边的球染成第\(n+1\)种颜色.求最终的颜色序列有多少种,对\(1000000007\ ...
- 【AGC 002F】Leftmost Ball
Description Snuke loves colorful balls. He has a total of N*K balls, K in each of his favorite N col ...
- 题解 【Codeforces489B】 BerSU Ball
本题是排序基础题. 我们可以将a[i].b[i]分别从小到大排序后,依次枚举比较两两组合是否符合要求,最后输出答案ans即可. AC代码: #include <bits/stdc++.h> ...
- 【AtCoder】AGC022 F - Leftmost Ball 计数DP
[题目]F - Leftmost Ball [题意]给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列.n,k<=2000. [算法]计数 ...
- 【arc073e】Ball Coloring(线段树,贪心)
[arc073e]Ball Coloring(线段树,贪心) 题面 AtCoder 洛谷 题解 大型翻车现场,菊队完美压中男神的模拟题 首先钦定全局最小值为红色,剩下的袋子按照其中较大值排序. 枚举前 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- 【原创】Django-ORM进阶
基础部分已经写完:[原创]Django-ORM基础 以下部分将对表与表之间的关联操作做以介绍 models.py #_*_coding:utf-8_*_ from django.db import m ...
- 【原创】Django-ORM基础
概述 1.什么是ORM? ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不 ...
随机推荐
- quartus ii 粗略使用教程
重复刚刚做过的下载程序,不选sof文件,选择jic文件 选择program config然后点击start,观察开发板,断电在开启后仍然有效果,想要擦除开发板flash文件,可以点击取消program ...
- 在Hadoop中ResourceManager是干什么的?
[学习笔记] 1)ResourceManager:马克-to-win @ 马克java社区:防盗版实名手机尾号:73203.当应用程序对集群资源需求时,ResourceManager是Yarn集群主控 ...
- POSTGRESQL日期函数大全
一:各个数据中的连接符 SqlServer的连接符:+(加号) Sqlite的连接符:.(点) PostgreSQL的连接符:||(或) 二: 今天在PostgreSQL计算日期的时候,翻了一些资料, ...
- Remainder Problem(分块) Educational Codeforces Round 71 (Rated for Div. 2)
引用:https://blog.csdn.net/qq_41879343/article/details/100565031 下面代码写错了,注意要上面这种.查:2 800 0,下面代码就错了. ...
- Jmeter入门(一)干货吐槽
前言:性能测试的基础是功能测试.性能测试的核心是业务场景,而这个业务场景是从功能测试的场景测试中提取出来的. 所以一个软件的测试顺序是:功能(接口)→性能N(接口)→自动化(接口) 接口测试则分布在每 ...
- prefixOverrides使用注意是事项
不可以prefixOverrides=',' 否则执行的sql格式可能为 id ,time ,name... 导致sql报错,或者执行结果出错
- java启动server时报端口无效解决方法
今天在Java里配置Tomcat服务器,启动时出现如下图报错信息 The server cannot be started because one or more of the ports are i ...
- canva绘制圆角矩形
在做组态的时候,需要支持矩形圆角格式,但是因为canvas本身不带有圆角矩形,需要自行算出坐标进行绘制 方案一.统一圆角 <!DOCTYPE html> <html> < ...
- 关于c语言的文法分析问题
<程序> -> <声明> | <程序> <函数> <声明> -> #include<stdio.h>|# ...
- asp.net Core 2.0 MVC为Controller或Action添加定制特性实现登录验证
前言:最近在倒腾 微软的新平台 asp.net Core 2.0,在这个过程中有些东西还是存在差异.下面是我在学习过程的一点笔记.有不妥之处,望各位大虾指正! 一.先创建一个控制器继承于Control ...