秀秀的照片(photo)

题目描述

华华在和秀秀视频时有截很多图。华华发现秀秀的每一张照片都很萌很可爱。为什么会这样呢?华华在仔细看过秀秀的所有照片后,发现秀秀的照片都具有一个相同的性质。

设秀秀的分辨率为m×nm×n,即在水平方向上每一行有mm个像素,垂直方向上每一列有nn个像素,照片共有m×nm×n个像素。每一个像素都有一个颜色,共有kk种颜色。华华宝宝发现无论是沿着哪两列像素的分界线将秀秀的照片分成左右两半(共有m−1m−1种分法),左右两半不同颜色的种数都是相同的。

华华宝宝把自己的发现告诉了秀秀宝宝。现在秀秀想知道当照片分辨率为m×nm×n,像素颜色种数为kk(不一定kk种颜色都出现)的时候,共有多少张不同的照片满足上面的性质。

由于答案可能很大,你只需输出答案对109+7109+7取模的结果即可。

数据范围

子任务会给出部分测试数据的特点。如果你在解决题目中遇到了困难,可以尝试只解决一部分测试数据。每个测试点的规模及特点如下表:

测试点编号

nn

mm

kk

1

n≤4n≤4

m≤4m≤4

k≤5k≤5

2

n≤10n≤10

3

n≤4n≤4

m≤10m≤10

4

n≤10n≤10

k≤10k≤10

5

k≤2000k≤2000

6

n≤100n≤100

m≤100m≤100

7

8

n≤2000n≤2000

m≤2000m≤2000

9

k≤106k≤106

10


solution

坑题,浪费了我好多时间,然后测试垫底了。。

我们考虑边上的两列,他们的颜色数应要相同,且中间的颜色应为他们的交集的子集。

假设中间颜色数为i,两边颜色数为i+j(也就是单独出现j种颜色)

方案数为

意思是先选i颜色,中间每个格子有i种填法

再在剩余的中选j个,再选j个,确定两边

再乘以 i+j个格子填n个物品的方案数·,再忽略格子的顺序(i+j)!,两边配对(^2)

Sij即为第二类斯特林数,表示i个格子放j个物品,且每个格子至少放一个的方案数

如果i单独放一个格子为s[i-1][j-1]

否则为s[i-1][j] 且有j种方法

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 4005
#define ll long long
#define mod 1000000007
using namespace std;
int n,m,k;
ll S[maxn][maxn],jc[1000006],ny[1000006],ans;
ll work(ll a,int num){
ll p=a,wa=1;
while(num){
if(num&1)wa=wa*p;
p=p*p;p%=mod;wa%=mod;num/=2;
}
return wa;
}
ll C(int N,int M){
return jc[N]*ny[M]%mod*ny[N-M]%mod;
}
int main()
{
cin>>n>>m>>k;
int nn=n+n;
S[0][0]=1;
for(int i=1;i<=nn;i++){
for(int j=1;j<=i;j++){
S[i][j]=S[i-1][j-1]%mod+j*S[i-1][j]%mod;
S[i][j]%=mod;
//cout<<S[i][j]<<' ';
}
}
int M=1000000;
jc[0]=1;for(int i=1;i<=M;i++)jc[i]=jc[i-1]*i%mod;
ny[M]=work(jc[M],mod-2);
for(int i=M-1;i>=0;i--)ny[i]=ny[i+1]*(i+1)%mod;
if(m==1){
printf("%lld",work(k,n));return 0;
}
for(int i=0;i<=min(n,k);i++)
for(int j=0;j<=n,k;j++){
if(i+j+j>k)break;if(i+j>n)break;
ll tmp=C(k,i)*C(k-i,j)%mod*C(k-i-j,j)%mod;
tmp=tmp*work(i,(m-2)*n)%mod;
ll t2=S[n][i+j]*jc[i+j]%mod;t2=t2*t2%mod;
ans=ans+tmp*t2%mod;ans%=mod;
}
cout<<ans<<endl;
return 0;
}

秀秀的照片(photo)的更多相关文章

  1. 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告

    [USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...

  2. [USACO13OPEN]照片Photo

    题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows (1 <= N < ...

  3. P3084 [USACO13OPEN]照片Photo (dp+单调队列优化)

    题目链接:传送门 题目: 题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows ( ...

  4. P3084 [USACO13OPEN]照片Photo

    题目描述 农夫约翰决定给站在一条线上的N(1 <= N <= 200,000)头奶牛制作一张全家福照片,N头奶牛编号1到N. 于是约翰拍摄了M(1 <= M <= 100,00 ...

  5. 洛谷3084 [USACO13OPEN]照片Photo

    原题链接 神仙\(DP\)啊... 题解请移步隔壁大佬的博客\(QAQ\) #include<cstdio> using namespace std; const int N = 2e5 ...

  6. Luugu 3084 [USACO13OPEN]照片Photo

    很神仙的dp...假装自己看懂了,以后回来复习复习... 设$f_{i}$表示从$1$到$i$,且$i$这个点必放的最大数量. 一个区间有两个限制条件:至少放一个,至多放一个. 因为一个区间至多要放一 ...

  7. 【简●解】[USACO] 照片Photo

    [简●解][USACO] 照片Photo [题目大意] 在\(1\)~\(N\)的序列上有\(M\)个区间,使得这\(M\)个小区间每个覆盖了且仅覆盖了一个点,求最多点数,如果无解,输出\(-1\). ...

  8. P3084 [USACO13OPEN]照片Photo dp

    题意: 有n个区间,每个区间只能有一个斑点奶牛,问最多有几个斑点奶牛. 思路: 首先要处理出每个点的L[i],R[i]. L[i]表示L[i]-i-1之间一定有一个点.i也是选中的. R[i]表示R[ ...

  9. [USACO13OPEN]照片Photo 题解

    题面 这道题似乎可以用单调队列优化DP做,但这里讲的是一种差分约束的思路; 设s[i]表示1~i中选了多少个: s[b[i]]-s[a[i]-1]<=1; s[b[i]]-s[a[i]-1]&g ...

随机推荐

  1. python_62_装饰器5

    import time def timer(func): #timer(test1) func=test1 def deco(*args,**kwargs): start_time=time.time ...

  2. WARNING: The TCP backlog setting of 511.解决

    redis启动警告问题:WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/so ...

  3. CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第五节

    原文链接 第五节:了解和使用共享内存(2) Rob Farber 是西北太平洋国家实验室(Pacific Northwest National Laboratory)的高级科研人员.他在多个国家级的实 ...

  4. 谭浩强 c++程序设计第一章课后习题 第10题

    #include <iostream> using namespace std; int main() { int a,b,c; cout<<"请输入三个整数类型的数 ...

  5. 2018.11.3 Nescafe18 T2 太鼓达人

    题目 背景 七夕祭上,Vani 牵着 cl 的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员 XLk.Poet_shy 和 ly ...

  6. Java 数值计算精度问题

    最近刚好做到涉及金额方面的项目,不像普通in,double,floatt类型来修饰,而是用BigDecimal来修饰,就去收集下了这方面的资料,整理如下: 1.float和double只能用来做科学计 ...

  7. 进入docker容器并执行命令的的3中方法

    进入docker容器并执行命令的的3中方法 docker exec   nsenter   docker attach "container" 建议使用nsenter, exec有 ...

  8. 二十七、MySQL 复制表

    MySQL 复制表 如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TABLE ... SELECT 命令,是无法实现的. 本章节将为大家介绍如何完 ...

  9. 新装NGINX重启,出现错误 nginx: [error] open() "/usr/local/nginx/logs/nginx.pid"

    重装nginx出现,重启出现错误 ./nginx -s reload nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" ...

  10. 3.Cisco Packet Tracer中关于交换机端口安全的设置

    本次实验将在这幅拓扑图的基础上完成 我们会对pc0在交换机上进行mac地址绑定,pc1访问时则交换机断开端口 1.为pc机配置ip地址 pc0:192.168.1.1 pc1:192.168.1.2 ...