首页 > 其他分享 >CF1237F Balanced Domino Placements

CF1237F Balanced Domino Placements

时间:2024-07-14 20:19:46浏览次数:11  
标签:CI int Domino 1LL inline Balanced mul CF1237F mod

比较有意思的 Counting,想到横竖两种骨牌的独立性就很好做了

考虑如果枚举最后放了 \(x\) 块横着的骨牌,\(y\) 块竖着的骨牌,直接考虑它们的摆放不方便,不妨转化一下

在所有空余的行中,选择 \(x+2y\) 行,且满足其中有 \(y\) 对相邻的行;在所有空余的列中,选择 \(2x+y\) 列,且满足其中有 \(x\) 对相邻的列

不难发现这样选出的行和列之间在组合时恰有 \(x!\times y!\) 种方案,且行列的选法是独立的,可以分开计算

考虑选取行的问题,先用 DP 算出选了恰好 \(y\) 对相邻的行的方案数,然后剩下的行用组合数算一下选单独的 \(x\) 行的方案数即可

DP 的状态也很简单,令 \(f_{i,j}\) 表示处理了前 \(i\) 行,此时选了 \(j\) 对相邻的行的方案数,转移显然

列的情况同理,预处理两个 DP 然后枚举 \(x,y\) 即可,总复杂度 \(O(nm)\)

#include<cstdio>
#include<iostream>
#define RI register int
#define CI const int&
using namespace std;
const int N=4005,mod=998244353;
int n,m,k,a,b,c,d,fact[N],ifac[N],f[N][N],g[N][N]; bool visr[N],visc[N];
inline void inc(int& x,CI y)
{
	if ((x+=y)>=mod) x-=mod;
}
inline int quick_pow(int x,int p=mod-2,int mul=1)
{
	for (;p;p>>=1,x=1LL*x*x%mod) if (p&1) mul=1LL*mul*x%mod; return mul;
}
inline void init(CI n)
{
	RI i; for (fact[0]=i=1;i<=n;++i) fact[i]=1LL*fact[i-1]*i%mod;
	for (ifac[n]=quick_pow(fact[n]),i=n-1;i>=0;--i) ifac[i]=1LL*ifac[i+1]*(i+1)%mod;
}
inline int C(CI n,CI m)
{
	if (n<0||m<0||n<m) return 0;
	return 1LL*fact[n]*ifac[m]%mod*ifac[n-m]%mod;
}
int main()
{
	RI i,j; scanf("%d%d%d",&n,&m,&k);
	for (i=1;i<=k;++i)
	{
		scanf("%d%d%d%d",&a,&b,&c,&d);
		visr[a]=visr[c]=1;
		visc[b]=visc[d]=1;
	}
	int free_r=0,free_c=0; init(max(n,m));
	for (i=1;i<=n;++i) free_r+=!visr[i];
	for (i=1;i<=m;++i) free_c+=!visc[i];
	for (f[0][0]=1,i=0;i<n;++i)
	for (j=0;j<=n;++j) if (f[i][j])
	{
		inc(f[i+1][j],f[i][j]);
		if (i+2<=n&&!visr[i+1]&&!visr[i+2])
		inc(f[i+2][j+1],f[i][j]);
	}
	for (g[0][0]=1,i=0;i<m;++i)
	for (j=0;j<=m;++j) if (g[i][j])
	{
		inc(g[i+1][j],g[i][j]);
		if (i+2<=m&&!visc[i+1]&&!visc[i+2])
		inc(g[i+2][j+1],g[i][j]);
	}
	int ans=0;
	for (i=0;i<=n;++i) for (j=0;j<=m;++j)
	{
		if (i+2*j>free_r||2*i+j>free_c) continue;
		//printf("i = %d, j = %d, f[n][j] = %d, g[m][i] = %d\n",i,j,f[n][j],g[m][i]);
		inc(ans,1LL*f[n][j]*C(free_r-2*j,i)%mod*g[m][i]%mod*C(free_c-2*i,j)%mod*fact[i]%mod*fact[j]%mod);
	}
	return printf("%d",ans),0;
}

标签:CI,int,Domino,1LL,inline,Balanced,mul,CF1237F,mod
From: https://www.cnblogs.com/cjjsb/p/18301941

相关文章

  • [namespace hdk] Balanced_tree 整合
    代码#include<bits/stdc++.h>usingnamespacestd;namespacehdk{ namespacebalanced_tree{ constintN=2000001,inf=114514191; classsplay{ private: introot,tot; structtree{ intw; intcnt,size; intfa,son[2]; }t[N];......
  • A1/2/3 Balanced Unshuffle
    A1A2A3这个是比赛中我为队贡献的最有价值的一题,写一下吧。以下就是我的思考过程。A1别人做的。但是签到,略。A2,A3因为A2,A3方法差不多,就直接说\(\mathcal{O}(n)\)的做法。我们来研究一个例子((()))()(())。他的前驱为((()()))()()。我们能得到的消息有,Prefixbal......
  • [题解]SP10606 Balanced Numbers
    SP10606BalancedNumbers关于优化方式的说明详见数位dp例题及详解-下。SPOJ注册不上所以暂时无法提交w,但是3份代码与正解对拍没有问题。使用\(vis[0\sim9]\)表示\(0\sim9\)的访问情况,\(sta[0\sim9]\)表示\(0\sim9\)填写个数的奇偶性(奇数为\(1\),偶数为\(0\))。暴搜先打出来,......
  • CF1924D Balanced Subsequences 题解
    先判掉\(k>\min(n,m)\)的情况。首先有个明显的计算最长合法括号子序列的贪心方法:初始一个值为\(0\)的计数器,从左到右枚举每个字符,遇到(时将计数器加一,遇到)时如果计数器不为\(0\)就减一然后将答案加一。考虑绘制它的折线图。初始时纵坐标为\(0\),从左到右枚举每个字符......
  • Delving into Sample Loss Curve to Embrace Noisy and Imbalanced Data
    这篇论文:提出了prob-and-allocate训练策略,在prob阶段获得样本损失,在allocate阶段分配样本权重。以[2]的meta-weight-net为Baseline,取名为CurveNet,进行部分改动。另外,这篇论文提供的源码结构混乱,复现难度较大。主要的工作也是基于meta-weight-net,创新的内容有限。但是,这篇文章......
  • Learning Imbalanced Datasets with Label-Distribution-Aware Margin Loss
    省去冗长的数学证明,直接看文章的贡献:提出了新的Loss函数以及延迟re-weighting的trick。并在多个数据集,包括情感分类、图像分类进行实验。Motivation&Methods:LDAM(Label-Distribution-AwareMargie)Losstailclasses的信息基本上较少,而且部署的模型通常很大,因此对tailclasse......
  • IMBALANCED TARGET DISTRIBUTIONS LEARING(目标类别不平衡学习)
    什么是目标类别不平衡?假设你训练集中数据的目标类别的分布较为均匀,那么这样的数据集所建立的分类模型,通常会有比较好的分类效能。假设你训练集中数据的目标类别的分布不均匀(存在MajorityClass和MinorityClass的时候),那么这样的数据集造成的问题是分类模型通常倾向将所有数据预......
  • Paper Reading: Imbalanced regression and extreme value prediction
    目录研究动机文章贡献本文方法不平衡回归的相关函数控制点插值方法自动和非参数相关函数评价指标实验结果数据集和实验设置模型选择实验模型优化优点和创新点PaperReading是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力所限,可能有理解不到位的地方。具体的细节还需......
  • Paper Reading: Density‑based weighting for imbalanced regression
    目录研究动机文章贡献本文方法DenseWeight稀有度度量权重函数DenseLoss实验结果实验整体的设置合成数据集实验实验设置实验结果对比实验实验设置降水量预测任务优点和创新点PaperReading是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力所限,可能有理解不到位的地方。......
  • (python)代码学习||2024.2.4||题目是codewars的【 All Balanced Parentheses】
    题目链接:https://www.codewars.com/kata/5426d7a2c2c7784365000783/pythondefbalanced_parens(n):'''Toconstructallthepossiblestringswithnpairsofbalancedparenthesesthisfunctionmakesuseofastackofitemswiththefoll......