首页 > 其他分享 >AT_agc002_f [AGC002F] Leftmost Ball 思考--zhengjun

AT_agc002_f [AGC002F] Leftmost Ball 思考--zhengjun

时间:2023-07-22 12:23:46浏览次数:37  
标签:agc002 Ball return ifac -- ll int ans mod

思维 + dp。

如果像题意那样先放球再染色的话不是很好做。

所以考虑有 \(n\) 个白球,\(n\) 种其他颜色的球各 \(k-1\) 个。

那么限制就是说对于每个前缀,白球的个数 \(\ge\) 其他颜色球的种数。

所以就可以设 \(f_{i,j}\) 为放了 \(i\) 个白球,\(j\) 种颜色的 \(k-1\) 个球的方案数。

那么剩下的 \(nk-i-j\times(k-1)\) 个空位中:

  • 要么第一个放白球,转移到 \(f_{i+1,j}\),方案数为 \(1\)。

  • 要么第一个放其他颜色的球,转移到 \(f_{i,j+1}\),方案数为 \((n-j)\times \binom{nk-i-j\times(k-1)-1}{k-2}\),意思是选出一种颜色填,并且剩下的空中第一个强制选择该颜色的球。

所以特判掉 \(k=1\) 的输出 \(1\) 即可。

代码

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=2e3+10,M=N*N,mod=1e9+7;
int n,k;
int fac[M],ifac[M];
ll qpow(ll x,ll y=mod-2){
	ll ans=1;
	for(;y;(x*=x)%=mod,y>>=1)if(y&1)(ans*=x)%=mod;
	return ans;
}
void init(int n){
	for(int i=fac[0]=1;i<=n;i++)fac[i]=1ll*fac[i-1]*i%mod;
	ifac[n]=qpow(fac[n]);
	for(int i=n;i>=1;i--)ifac[i-1]=1ll*ifac[i]*i%mod;
}
int C(int n,int m){
	if(0>m||m>n)return 0;
	return 1ll*fac[n]*ifac[m]%mod*ifac[n-m]%mod;
}
int f[N][N];
int main(){
	freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	cin>>n>>k,init(n*k);
	if(k==1)return puts("1"),0;
	for(int i=1;i<=n;i++){
		f[i][0]=1;
		for(int j=1;j<=i;j++){
			f[i][j]=(f[i-1][j]+1ll*f[i][j-1]*C(n*k-i-(j-1)*(k-1)-1,k-2)%mod*(n-j+1))%mod;
		}
	}
	cout<<f[n][n];
	return 0;
}

标签:agc002,Ball,return,ifac,--,ll,int,ans,mod
From: https://www.cnblogs.com/A-zjzj/p/17573145.html

相关文章

  • 在VScodes上搭建keil环境
    目录本质前期准备插件下载插件设置打开项目本质通过插件KeilAssistant调用keil的API前期准备VScodekeilkeil提前创建好的工程文件插件下载在扩展商店搜索KeilAssistant插件设置打开扩展设置找到UV4.exe的路径填写UV4.exe的路径打开项目此......
  • C#动态库调用webservice
    1.c#调用一外部webservice时,对方能收到数据包,缺收不到正确数据,报莫名错误。对方也不知道原因。只能采用动态调用方式。采用如下类:1publicclassWebserviceHelper2{3///<summary>4///动态调用web服务5///</summary>6......
  • C# 实现抓取财经网站页面内容的实例方法
    ​ protectedvoidEnter_Click(objectsender,EventArgse)        {            WebClientwe=newWebClient();  //主要使用WebClient类            byte[]myDataBuffer;            myDataBuffer=we.DownloadData......
  • 验证码插件 vercode.js
    第1代图片验证码- 字母数字型 第2代滑动验证码-图片截取型第3代验证码-选图型 vercode.js结合了上面的情况下新研发的一种验证码。验证码类型验证码描述操作性安全性描述字母数字型图片验证码这是一种通过后台随机码生成图片的验证码。服务器会在......
  • 机器学习编译(二):张量程序抽象
    元张量函数(primitivetensorfunction)一个模型的执行包含tensor和primitivetensorfunction,后者是定义tensor之间的计算步骤的函数(通常也叫op,不过这里的范围更广,还包括Module等)。上面的linear、add、relu、softmax都是元张量函数。框架通常都会实现常见的计算操......
  • 自定义异常类
    1'''21.语法说明3自定义异常类是指在编程中,根据实际需要创建的用于表示特定错误或异常情况的类。4通过自定义异常类,我们可以更好地组织和处理代码中可能出现的异常情况。5classCustomException(Exception):6def__init__(self,message):7......
  • git cherry-pick的使用
    gitcherry-pick<commitid>是用来将其他某个分支上的某次commit复制到当前分支假设你的项目提交历史如下:(箭头相当于一个指针,表示当前这个commit是基于指向的那个commit修改的,HEAD也是一个这样的指针)如果你希望将提交e43a6拉取到master分支,你可以执行:$gitcheckout......
  • x86架构BIOS攻击面梳理与分析
    x86架构BIOS攻击面梳理与分析之前的一份学习笔记,主要整理了一下x86架构下BIOS的一些攻击面,BootKit部分还没有搬上来。可能有一些理解存在疏漏的地方,还请看官老爷斧正。调研目标一、梳理安全启动的基本流程经历的过程软硬件层面需要完成的工作二、梳理攻......
  • linux找回root密码
    1、重启linux系统,移动光标至图中位置,然后按'e'键2、找到linux16...,将光标移至段落最后3、输入init=/bin//sh,然后ctrl+x,进入单用户模式 4、输入mount-oremount,rw/然后回车注意每个单词之间都有空格5、输入passwd,然后输入密码(不少于8位)6、输入touch/.aut......
  • 7.11 图联通
    传送门P3436[POI2006]PRO-ProfessorSzu题意描述不太清楚,就算到达\(n\)可绕一圈再回来,且数据里图不连通。考虑先求出强连通分量,缩完点后建反图在\(\text{DAG}\)上跑\(\text{dp}\)计数,注意只记那些从\(n\)点开始可达的,如果路径上有一个强连通分量里有边,意味着可以在这......