解题: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) 若平局,两支球队各得 ...
随机推荐
- WPF Style
<Application x:Class="WzlyTool.App" xmlns="http://schemas.microsoft.com/winfx/20 ...
- 20155204 王昊《网络对抗技术》EXP3
20155204 王昊<网络对抗技术>EXP3 一.基础问题回答 1.杀软是如何检测出恶意代码的? 答: 基于特征码:一段特征码就是一段或多段数据.(如果一个可执行文件(或其他运行的库.脚 ...
- 20155310 Exp9 Web安全基础实践
20155310 Exp9 Web安全基础实践 基础问题 SQL注入攻击原理,如何防御? SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞.也就是,在输入字符串中嵌入SQL指令,在 ...
- 【TPM】tpm搭建基础指南
pm君第一次通过各种摸索,成功搭建了tpm模拟环境,本篇博客记录了如何去搭建tpm模拟环境,希望能给大家一些帮助. 参考资料(推荐看) ubuntu下安装TPM模拟器 --成功步骤:参考至第2节-安装 ...
- mysql提示Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist解决方法
一次重启mysql发现无法启动成功,通过检查mysql日志发现问题并解决了问题. mysql启动失败的日志: [root@nn ~]# tail -n 20 /var/log/mysqld.log 1 ...
- 记一次 java 连接 linux ssh服务 权限验证失败的原因和解决过程
下面的问题我是通过之前的ssh测试类找出原因的,因为我的测试类跑通了,但是程序跑不通,看了一下源码发现还有一处没有进行解密,所以才会权限验证失败. // 出现权限验证失败的原因就在这里,因为老板要求对 ...
- ES6 箭头函数易出错细节
箭头函数表达式的语法比函数表达式更短,并且没有自己的this,arguments,super或 new.target. 箭头函数基本语法 (参数1, 参数2, -, 参数N) => { 函数声明 ...
- 定制 input[type="radio"] 和 input[type="checkbox"] 样式
表单中,经常会使用到单选按钮和复选框,但是,input[type="radio"] 和 input[type="checkbox"] 的默认样式在不同的浏览器或 ...
- 设计模式 笔记 享元模式 Flyweight
//---------------------------15/04/20---------------------------- //Flyweight 享元模式------对象结构型模式 /* 1 ...
- 290. Word Pattern【LeetCode by java】
今天发现LintCode页面刷新不出来了,所以就转战LeetCode.还是像以前一样,做题顺序:难度从低到高,每天至少一题. Given a pattern and a string str, fin ...