解题:HNOI 2013 Cards
除了不洗牌以外,每种洗牌方式的每个循环里的颜色必须一样,然后大力背包一下就好了。最后记得把不洗牌的方案也算进去
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int n,m,p,c1,c2,c3,ans;
int dp[][N][N][N],noww,last;
int trs[N][N],vec[N][N],siz[N],vis[N];
void exGCD(int a,int b,int &x,int &y)
{
if(!b) x=,y=;
else exGCD(b,a%b,y,x),y-=a/b*x;
}
int Inv(int x)
{
int xx,yy;
exGCD(x,p,xx,yy);
return (xx%p+p)%p;
}
void Mod(int &x,int y)
{
x+=y;
if(x>=p) x-=p;
}
void Getcir(int idx,int pos)
{
vis[pos]=true,vec[idx][siz[idx]]++;
if(!vis[trs[idx][pos]])
Getcir(idx,trs[idx][pos]);
}
int main()
{
scanf("%d%d%d%d%d",&c1,&c2,&c3,&m,&p),n=c1+c2+c3;
for(int i=;i<=m;i++)
{
for(int j=;j<=n;j++)
scanf("%d",&trs[i][j]);
memset(vis,,sizeof vis);
for(int j=;j<=n;j++)
if(!vis[j]) siz[i]++,Getcir(i,j);
}
for(int i=;i<=m;i++)
{
memset(dp,,sizeof dp),noww=dp[][][][]=,last=;
for(int j=;j<=siz[i];j++)
{
int sz=vec[i][j];
for(int k=;k<=c1-sz;k++)
for(int h=;h<=c2-sz;h++)
for(int l=;l<=c3-sz;l++)
{
int t=dp[last][k][h][l];
if(k+sz<=c1) Mod(dp[noww][k+sz][h][l],t);
if(h+sz<=c2) Mod(dp[noww][k][h+sz][l],t);
if(l+sz<=c3) Mod(dp[noww][k][h][l+sz],t);
}
last=noww,noww^=;
}
ans+=dp[last][c1][c2][c3],ans%=p;
}
memset(dp,,sizeof dp),noww=dp[][][][]=,last=;
for(int i=;i<=n;i++)
{
for(int k=;k<=c1;k++)
for(int h=;h<=c2;h++)
for(int l=;l<=c3;l++)
{
int t=dp[last][k][h][l];
if(k+<=c1) Mod(dp[noww][k+][h][l],t);
if(h+<=c2) Mod(dp[noww][k][h+][l],t);
if(l+<=c3) Mod(dp[noww][k][h][l+],t);
}
last=noww,noww^=;
}
printf("%lld",1ll*(ans+dp[last][c1][c2][c3])*Inv(m+)%p);
return ;
}
解题:HNOI 2013 Cards的更多相关文章
- 图论(网络流):[HNOI 2013]切糕
[HNOI 2013]切糕 第三题:切糕(程序文件名:cake.exe)100 分,运行时限:5s 经过千辛万苦小A 得到了一块切糕,切糕的形状是长方体,小A 打算拦腰将切糕切成两半分给小B.出于美观 ...
- [HNOI 2013]切糕
COGS 2398. [HNOI 2013]切糕 http://www.cogs.pro/cogs/problem/problem.php?pid=2398 ★★★☆ 输入文件:nutcake.i ...
- [BZOJ 3144][HNOI 2013] 切糕
题目大意 切糕是 (p times q times r) 的长方体,每个点有一个违和感 (v_{x, y, z}).先要水平切开切糕(即对于每个纵轴,切面与其有且只有一个交点),要求水平上相邻两点的切 ...
- [bzoj 1004][HNOI 2008]Cards(Burnside引理+DP)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1004 分析: 1.确定方向:肯定是组合数学问题,不是Polya就是Burnside,然后题目上 ...
- [HNOI 2013] 旅行 (数学)
感觉此题难啊,数学还是太渣了,看了半天的题解才算明白了点儿. 题目大意 给一个长度为n且仅由1和-1组成的序列ai, i = 1, 2, ..., n,每个位置都有另一个值vi,要求用某种方案将序列划 ...
- [HNOI 2013] 消毒 (搜索,二分图匹配)
题目大意 一个a * b * c(a * b * c <= 5000)大小的长方体中有一些点需要被覆盖,每次可以选择任意大小的长方体,覆盖其中的点,产生的代价为这个长方体长宽高中最小的那个的长度 ...
- [HNOI 2013]数列
Description 题库链接 给你四个数 \(N,K,M,P\) ,让你生成一段长度为 \(K\) 严格单调递增序列,并且满足: 第一位可以为任意元素: 相邻两位的差值不超过 \(M\) : 序列 ...
- [HNOI 2013]游走
Description 题库链接 一个无向连通图,顶点从 \(1\) 编号到 \(N\) ,边从 \(1\) 编号到 \(M\) . 小Z在该图上进行随机游走,初始时小Z在 \(1\) 号顶点,每一步 ...
- [HNOI 2013]比赛
Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各得 ...
随机推荐
- Python3入门(三)——Python基础语法
一.基本语法 1.行和缩进 Python中,不使用括号来表示代码的类和函数定义块或流程控制. 代码块是由行缩进,缩进位的数目是可变的,但是在块中的所有语句必须缩进相同的量. 如下所示: a = 100 ...
- uboot启动过程理解
对于2440而言,启动的方式不多.一般就是外界一个NAND FLASH ,2440内部有个NAND FLASH Controller,会自动把NAND FLASH的前4K拷贝到2440的片内SRAM. ...
- dxp altium pcb里面如果想让重叠的两个元件不报错怎么设置?
dxp的设置是Design Rules里面有个Placement选项,把第一个的钩去掉即可.
- C#Unit单元测试之读取Web.config文件
长期一来,我们所完成的项目都没有写单元测试,今天我一时兴起,决定给自己写的代码写单元测试,简单的测试代码分分钟完成了,一运行测试,就懵逼了.没能达到我的预期效果,而是出现图1所示错误. 图1:单元测试 ...
- 轻量级直播服务器SRS安装及编译
最近由于公司开发的需要--互动会议,开始研究直播中的技术.由于自身没有接触过虚拟机导致在研究的过程中遇到了很大的问题,首先官方GitHub给出的文档并没有清晰的指出编译是需要通过何种方式进行编译?以下 ...
- okhttp3.4.1+retrofit2.1.0实现离线缓存
关于Retrofit+OkHttp的强大这里就不多说了,还没了解的同学可以自行去百度.这篇文章主要讲如何利用Retrofit+OkHttp来实现一个较为简单的缓存策略:即有网环境下我们请求数据时,如果 ...
- 条件GAN论文简单解读
条件GAN(Conditional Generative Adversarial Nets),原文地址为CGAN. Abstract 生成对抗网络(GAN)是最近提出的训练生成模型(g ...
- 利用可道云kodexplorer在树莓派raspbian上搭建私有云网盘
可道云kodexplorer是一款开源私有云系统,类似于owncloud,Dropbox.SkyDrive,seafile等.将可道云kodexplorer搭建在树莓派上,从而在树莓派上存储.管理家庭 ...
- Kubernetes调用vSphere vSAN做持久化存储
参考 1.vSphere Storage for Kubernetes 2.IBM vSphere Cloud Provider 3.GitHub vSphere Volume examples 一. ...
- Win10 + vs2017 编译并配置tesseract4.1.0
tesseract 是一个开源的OCR (Optical Character Recognition , 光学字符识别) 引擎,本文就介绍一下自己在编译 tesseract4.1.0时遇到的一些坑,希 ...