Codeforces 题目传送门 & 洛谷题目传送门

考虑什么样的 2-染色方式是符合题目要求的,首先蓝、黄颜色所形成的连通块个数必须 \(\le 2\),否则一定不合法,而显然如果两种颜色连通块个数都为 \(1\) 也不合法,以蓝色连通块个数为 \(1\),黄色连通块个数为 \(2\) 为例,稍微画个图即可发现合法的染色方式都如下图所示:

也就是说存在一个分割点 \(i\),使得第一个连通块全部在第 \(i\) 列左侧,第二个连通块全部在第 \(i\) 列右侧,那么显然两个连通块与第 \(i\) 列的交点分别是一段不相交区间 \((l_1,r_1),(l_2,r_2)\),我们假设第一个连通块的区间在第二个连通块的区间的上方,也就是如图所示的情况,那么我们假设 \(j=r_1,k=l_2\)(当然如果 \(j=k\) 蓝色连通块会被一分为二,也就是蓝色、黄色连通块个数都为 \(2\) 的情况),那么显然第一个连通块与直线 \(x=i\) 的交中最下方的点的坐标就是 \((j,i)\)(即图中的点 A),第二个连通块与直线 \(x=i\) 的交中最上方的点就是 \((k,i)\)(即图中的点 B)。接下来考虑怎样计算方案数,隔板法是肯定没问题的,不过这里有一种更简便的理解方式,以计算 \(A\) 左上角的方案数为例,它等价于从最左上角的点走到 \(A\) 的方案数,但由于 \(A\) 是这段区间中最下方的点,因此最后一步必须是向下走的,因此左上角的方案数就是从最左上角的点走到 \(A\) 上方的点的方案数,另外四块也同理,如图所示:

暴力枚举是 \(n^2m\) 的,通过前缀和优化可以做到 \(nm\)。对于 \((l_1,r_1)\) 在 \((l_2,r_2)\) 下方的情况只需乘个 \(2\) 即可,因为所有 \((l_1,r_1)\) 在 \((l_2,r_2)\) 上方的情况把它上下翻转都能够得到 \((l_1,r_1)\) 在 \((l_2,r_2)\) 下方的情况,因此它们构成了一个双射。对于蓝色连通块个数为 \(2\),黄色连通块个数为 \(1\) 的情况其实很 simple,只需做整个网络关于 \(y=x\) 对称的图形即可,但是这样蓝色、黄色连通块个数都是 \(2\) 的情况会被算重,因此第二次计算的时候需要强制令 \(k-j\ge 1\)。

时间复杂度 \(\mathcal O(nm)\)

const int MAXN=1<<12;
const int MOD=998244353;
int n,m,fac[MAXN+5],ifac[MAXN+5],ans=0;
void init_fac(int n){
for(int i=(fac[0]=ifac[0]=ifac[1]=1)+1;i<=n;i++) ifac[i]=1ll*ifac[MOD%i]*(MOD-MOD/i)%MOD;
for(int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%MOD,ifac[i]=1ll*ifac[i-1]*ifac[i]%MOD;
}
int ways(int x,int y){return 1ll*fac[x+y]*ifac[x]%MOD*ifac[y]%MOD;}
int main(){
scanf("%d%d",&n,&m);init_fac(MAXN);
for(int i=1;i<=m-1;i++){
int sum=0;
for(int j=1;j<=n-1;j++){
sum=(sum+1ll*ways(i,j-1)*ways(i-1,n-j))%MOD;
ans=(ans+1ll*sum*ways(m-i-1,j)%MOD*ways(m-i,n-j-1))%MOD;
}
} n^=m^=n^=m;
for(int i=1;i<=m-1;i++){
int sum=0;
for(int j=1;j<=n-1;j++){
ans=(ans+1ll*sum*ways(m-i-1,j)%MOD*ways(m-i,n-j-1))%MOD;
sum=(sum+1ll*ways(i,j-1)*ways(i-1,n-j))%MOD;
}
} printf("%d\n",(ans<<1)%MOD);
return 0;
}

Codeforces 1503E - 2-Coloring(组合数学)的更多相关文章

  1. Codeforces 1027E Inverse Coloring 【DP】

    Codeforces 1027E Inverse Coloring 题目链接 #include<bits/stdc++.h> using namespace std; #define N ...

  2. cf111D Petya and Coloring 组合数学,二项式反演

    http://codeforces.com/contest/111/problem/D Little Petya loves counting. He wants to count the numbe ...

  3. CodeForces #369 C. Coloring Trees DP

    题目链接:C. Coloring Trees 题意:给出n棵树的颜色,有些树被染了,有些没有.现在让你把没被染色的树染色.使得beauty = k.问,最少使用的颜料是多少.   K:连续的颜色为一组 ...

  4. codeforces 711C C. Coloring Trees(dp)

    题目链接: C. Coloring Trees time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  5. Codeforces 711 C. Coloring Trees (dp)

    题目链接:http://codeforces.com/problemset/problem/711/C 给你n棵树,m种颜色,k是指定最后的完美值.接下来一行n个数 表示1~n树原本的颜色,0的话就是 ...

  6. Codeforces 995F Cowmpany Cowmpensation - 组合数学

    题目传送门 传送点I 传送点II 传送点III 题目大意 给定一个棵$n$个点的有根树和整数$D$,给这$n$个点标号,要求每个节点的标号是正整数,且不超过父节点的标号,根节点的标号不得超过D. 很容 ...

  7. Codeforces 40E Number Table - 组合数学

    题目传送门 传送门I 传送门II 题目大意 给定一个$n\times m$的网格,每个格子上要么填$1$,要么填$-1$,有$k$个位置上的数是已经填好的,其他位置都是空的.问有多少种填法使得任意一行 ...

  8. Codeforces 37D Lesson Timetable - 组合数学 - 动态规划

    题目传送门 神奇的门I 神奇的门II 题目大意 有$n$组学生要上课2次课,有$m$个教室,编号为$1$到$m$.要确定有多少种不同的安排上课的教室的方案(每组学生都是本质不同的),使得它们满足: 每 ...

  9. Codeforces 711D Directed Roads - 组合数学

    ZS the Coder and Chris the Baboon has explored Udayland for quite some time. They realize that it co ...

随机推荐

  1. LeetCode:回溯算法

    回溯算法 这部分主要是学习了 labuladong 公众号中对于回溯算法的讲解 刷了些 leetcode 题,在此做一些记录,不然没几天就忘光光了 总结 概述 回溯是 DFS 中的一种技巧.回溯法采用 ...

  2. 第六次Alpha Scrum Meeting

    本次会议为Alpha阶段第六次Scrum Meeting会议 会议概要 会议时间:2021年5月2日 会议地点:线上会议 会议时长:20min 会议内容简介:本次会议主要由每个人展示自己目前完成的工作 ...

  3. [对对子队]Beta阶段项目展示博客

    Beta阶段项目展示博客 1 团队成员的简介和个人博客地址 成员 头像 岗位 博客 个人介绍 黄贤昊 PM 17373253 喜欢玩游戏和做游戏,项目经验基本都和游戏相关,擅长摸鱼,偶尔敬业. 吴桐雨 ...

  4. elasticsearch的dsl查询

    测试es的dsl查询,准备数据,在插入数据的时候,如果index.type.mapping都没有,es会自动创建 一.数据的准备 curl -XPOST "http://192.168.99 ...

  5. (六)、Docker 之 Dockerfile

    1.什么是Dockerfile Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 2.Dockerfile解析过程 前提认知: 每条保留字指令都必须为大写字母 ...

  6. Noip模拟77 2021.10.15

    T1 最大或 $T1$因为没有开$1ll$右移给炸掉了,调了一年不知道为啥,最后实在不懂了 换成$pow$就过掉了,但是考场上这题耽误了太多时间,后面的题也就没办法好好打了.... 以后一定要注意右移 ...

  7. 请问为什么要用三极管驱动mos,直接用mos有什么缺点呢?

    可能无法完全导通,电流可能过小使导通所需时间变长,最终导致发热严重       回复 举报     csaaa DIY七级 3# 发表于 2016-7-12 14:11:59 直接驱动mos也没什么问 ...

  8. Luogu P1023 [NOIp2000提高组]税收与补贴问题 | 数学

    题目链接 思路:列不等式组,然后解出不等式,得出答案的取值范围,最后取一个绝对值最小的答案就行了. #include<iostream> #include<cstdio> #i ...

  9. hdu 3047 Zjnu Stadium(并查集)

    题意: 300个座位构成一个圈. 有N个人要入座. 共有M个说明 :A B X ,代表B坐在A顺时针方向第X个座位上.如果这个说明和之前的起冲突,则它是无效的. 问总共有多少个无效的. 思路: 并查集 ...

  10. hdu 5179 beautiful number(构造,,,,)

    题意: 一个如果称作是漂亮数,当且仅当满足: 每一位上的数字是[1,9],从高到时低数字大小降序,且有di%dj=0(i<j) 例:931 给一个区间[L,R],问这个区间里有多少个漂亮数. 1 ...