秀秀的照片(photo)
秀秀的照片(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)的更多相关文章
- 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告
[USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...
- [USACO13OPEN]照片Photo
题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows (1 <= N < ...
- P3084 [USACO13OPEN]照片Photo (dp+单调队列优化)
题目链接:传送门 题目: 题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows ( ...
- P3084 [USACO13OPEN]照片Photo
题目描述 农夫约翰决定给站在一条线上的N(1 <= N <= 200,000)头奶牛制作一张全家福照片,N头奶牛编号1到N. 于是约翰拍摄了M(1 <= M <= 100,00 ...
- 洛谷3084 [USACO13OPEN]照片Photo
原题链接 神仙\(DP\)啊... 题解请移步隔壁大佬的博客\(QAQ\) #include<cstdio> using namespace std; const int N = 2e5 ...
- Luugu 3084 [USACO13OPEN]照片Photo
很神仙的dp...假装自己看懂了,以后回来复习复习... 设$f_{i}$表示从$1$到$i$,且$i$这个点必放的最大数量. 一个区间有两个限制条件:至少放一个,至多放一个. 因为一个区间至多要放一 ...
- 【简●解】[USACO] 照片Photo
[简●解][USACO] 照片Photo [题目大意] 在\(1\)~\(N\)的序列上有\(M\)个区间,使得这\(M\)个小区间每个覆盖了且仅覆盖了一个点,求最多点数,如果无解,输出\(-1\). ...
- P3084 [USACO13OPEN]照片Photo dp
题意: 有n个区间,每个区间只能有一个斑点奶牛,问最多有几个斑点奶牛. 思路: 首先要处理出每个点的L[i],R[i]. L[i]表示L[i]-i-1之间一定有一个点.i也是选中的. R[i]表示R[ ...
- [USACO13OPEN]照片Photo 题解
题面 这道题似乎可以用单调队列优化DP做,但这里讲的是一种差分约束的思路; 设s[i]表示1~i中选了多少个: s[b[i]]-s[a[i]-1]<=1; s[b[i]]-s[a[i]-1]&g ...
随机推荐
- 启动tomcat的Cannot find ./catalina.sh 的问题
从终端进入tomcat的bin目录,然后执行startup.sh Cannot find bin/catalina.sh The file is absent or does not have exe ...
- SyntaxError: Non-ASCII character ‘\xe5′ in file和在代码中插入中文,python中文注释
SyntaxError: Non-ASCII character '\xe7' in file 出现这种错误的原因是程序中的编码出问题了,只要在程序的最前面加上 #coding: utf-8 重新保存 ...
- datetime 插件
1 写一段文本 <div id="nomarl-wrap"> <div class="form-group"> <label c ...
- C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖
学习C++必定会遇到重载.重写.重定义.概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了. 概念,特点: 重载: 直白点说就是函数名字相同,传参的个数,类型不一样.判断标准在于 ...
- NOIP2018 全国热身赛 第二场 (不开放)
NOIP2018 全国热身赛 第二场 (不开放) 题目链接:http://noi.ac/contest/26/problem/60 一道蛮有趣的题目. 然后比赛傻逼了. 即将做出来的时候去做别的题了. ...
- EasyUI取消树节点选中
$('#organTree').find('.tree-node-selected').removeClass('tree-node-selected'); 取消树的节点选中
- Python小项目之五子棋
1.项目简介 在刚刚学习完python套接字的时候做的一个五子棋小游戏,可以在局域网内双人对战,也可以和电脑对战 2.实现思路 局域网对战 对于局域网功能来说,首先建立连接(tcp),然后每次下棋时将 ...
- Linux系统故障分析与排查--日志分析
处理Linux系统出现的各种故障时,故障的症状是最先发现的,而导致这以故障的原因才是最终排除故障的关键.熟悉Linux系统的日志管理,了解常见故障的分析与解决办法,将有助于管理员快速定位故障点,“对症 ...
- HashMap原理以及自己实现HashMap
1.HashMap是什么? HashMap是java常用来存储键值对的数据结构,它是以key/value的形式存储的,它不是线程安全的,Key可以为null值. 2.HashMap的实现原理 Hash ...
- DevOps - 日志分析 -ELK
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-co ...