首页 > 其他分享 >CodeForces 1931G One-Dimensional Puzzle

CodeForces 1931G One-Dimensional Puzzle

时间:2024-02-14 10:55:38浏览次数:23  
标签:1931G 10 01 Puzzle Dimensional c01 c10 ll mod

洛谷传送门

CF 传送门

什么 [ABC336G] 16 Integers 究极弱化版。

把元素 \(1\) 看成 \(01\),元素 \(2\) 看成 \(10\),元素 \(3\) 看成 \(11\),元素 \(4\) 看成 \(00\)。则转化为统计长度为 \(2\) 的子串 \(xy\) 出现次数为 \(c_{xy}\) 的 \(01\) 串个数。

把子串 \(xy\) 看成 \(x \to y\) 的一条有向边,那么这是一个点数为 \(2\) 的欧拉路径计数问题,可以 BEST 定理解决,但是不需要。

有解的必要条件是 \(|c_{01} - c_{10}| \le 1\)。若 \(c_{01} = c_{10}\) 那么 \(01\) 串开头和结尾的字符相同。若以 \(0\) 开头和结尾,相当于把 \(c_{00} + c_{01} + 1\) 个 \(0\) 分成 \(c_{01} + 1\) 份,\(c_{10} + c_{11}\) 个 \(1\) 分成 \(c_{c10}\) 份,每份非空,根据插板法可得方案数为 \(\binom{c_{00} + c_{01}}{c_{01}} \binom{c_{10} + c_{11} - 1}{c_{10} - 1}\)。以 \(1\) 开头和结尾类似。

若 \(c_{01} = c_{10} + 1\),那么以 \(0\) 开头,以 \(1\) 结尾。相当于把 \(c_{00} + c_{01}\) 个 \(0\) 分成 \(c_{01}\) 份,\(c_{11} + c_{01}\) 个 \(1\) 分成 \(c_{01}\) 份,方案数为 \(\binom{c_{00} + c_{01} - 1}{c_{01} - 1} \binom{c_{11} + c_{01} - 1}{c_{01} - 1}\)。

\(c_{10} = c_{01} + 1\) 的情况是类似的。注意特判 \(c_{10} = c_{01} = 0\),这种情况只能是全 \(0\) 或全 \(1\),所以 \(c_{00}\) 和 \(c_{11}\) 不能都非 \(0\)。

时间复杂度 \(O(T + \sum c_i)\)。

code
// Problem: G. One-Dimensional Puzzle
// Contest: Codeforces - Codeforces Round 925 (Div. 3)
// URL: https://codeforces.com/contest/1931/problem/G
// Memory Limit: 256 MB
// Time Limit: 4000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mkp make_pair
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;

const int N = 4000000;
const ll mod = 998244353;

inline ll qpow(ll b, ll p) {
	ll res = 1;
	while (p) {
		if (p & 1) {
			res = res * b % mod;
		}
		b = b * b % mod;
		p >>= 1;
	}
	return res;
}

int c00, c01, c10, c11;
ll fac[N + 5], ifac[N + 5];

inline void init() {
	fac[0] = 1;
	for (int i = 1; i <= N; ++i) {
		fac[i] = fac[i - 1] * i % mod;
	}
	ifac[N] = qpow(fac[N], mod - 2);
	for (int i = N - 1; ~i; --i) {
		ifac[i] = ifac[i + 1] * (i + 1) % mod;
	}
}

inline ll C(ll n, ll m) {
	if (n < m || n < 0 || m < 0) {
		return 1;
	} else {
		return fac[n] * ifac[m] % mod * ifac[n - m] % mod;
	}
}

void solve() {
	scanf("%d%d%d%d", &c01, &c10, &c11, &c00);
	if (abs(c01 - c10) >= 2) {
		puts("0");
		return;
	}
	if (c01 == 0 && c10 == 0) {
		puts(((c00 ? 1 : 0) + (c11 ? 1 : 0)) == 2 ? "0" : "1");
		return;
	}
	if (c01 == c10) {
		printf("%lld\n", (C(c11 + c10 - 1, c10 - 1) * C(c01 + c00, c01) + C(c11 + c10, c10) * C(c01 + c00 - 1, c01 - 1)) % mod);
	} else if (c01 == c10 + 1) {
		printf("%lld\n", C(c11 + c01 - 1, c01 - 1) * C(c01 + c00 - 1, c01 - 1) % mod);
	} else {
		printf("%lld\n", C(c11 + c10 - 1, c10 - 1) * C(c10 + c00 - 1, c10 - 1) % mod);
	}
}

int main() {
	init();
	int T = 1;
	scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:1931G,10,01,Puzzle,Dimensional,c01,c10,ll,mod
From: https://www.cnblogs.com/zltzlt-blog/p/18015079

相关文章

  • Puzzle hunt 工具
    写在前面   做一下破解网站的汇总,方便调出来用,省的老在收藏夹韩信点兵()关于古典密码相关的网站指路古典密码篇→古典密码汇总-Tey729-博客园(cnblogs.com) 正文1.Qat-可定位字母找单词 Qat(quinapalus.com) 2.河马-搭配Qat食用,单词更多也更不靠谱 Th......
  • four-dimensional
    本文参考《从一到无穷大》(作者:George$\cdot$Gamow)第$4$章笔者知识浅薄,只是阅后拙见。可能有错漏之处,望高明的读者赐教。什么是四维空间众所周知,我们生活的三维空间中,确定物体的位置需要$3$个坐标:长,宽,高。四维空间,就是有$4$个维度。那么,第四维是什么?让我们想象一个情......
  • ABC336 F Rotation Puzzle 题解
    QuestionABC336FRotationPuzzle给出一个\(H\timesW\)的矩阵,里面填有数字,有一种操作选定一个\((x,y)\)交换\((i+x,j+y)\)和\((H-i+x,W-j+y)\)对于每一个\(1\lei\leH-1,1\lej\leW-1\)问,是否能经过\(20\)次以内的操作使得,最后的矩形变成\((i,j)=((i-1)\t......
  • 利用强化学习算法解释人类脑对高维状态的抽象表示:how humans can map high-dimensiona
    论文:《Usingdeepreinforcementlearningtorevealhowthebrainencodesabstractstate-spacerepresentationsinhigh-dimensionalenvironments》地址:https://www.cell.com/neuron/fulltext/S0896-6273(20)30899-0正文:https://www.cell.com/neuron/pdf/S0896-6273(20......
  • Animals and Puzzle 题解
    原题链接:CF713D题意:给定一个\(n\timesm\)的地图\(a\),\(a_{i}\)为\(0\)或\(1\)。有\(t\)次询问,每次询问给定一个矩形,求出这个矩形中最大的由\(1\)构成的正方形的边长是多少。首先考虑预处理出\(d_{i,j}\)表示以\((i,j)\)为左上角的最大正方形边长是多少。对于每......
  • 多因子降维法 multifactor dimensionality reduction MDR
    MDR的应用:在病例对照研究中,应用多因子降维法(MDR)分析基因-基因交互作用,较传统的统计学分析方法无法比拟的优势。Logistic回归的局限性理论上的不足:自变量对疾病的影响是独立的,但实际情况及推导结果不同。模型有不合理性:“乘法模型”与一般希望的“相加模型”相矛盾。最大似然......
  • CF1773J King's Puzzle 题解
    题意:思路:当$k\gen$时,一定无法构造。证明:$n$个点的无向图,每个点的度数$d∈[1,n-1]$,度数的种数一定不会超过$n-1$。当$k\len-1$时,构造方案如下:首先,选取前$k+1$个点,构造成一条链,此时链上各点的度数为$1$,$2$,$2$,$...$,$2......
  • The 2023 ICPC Asia Hefei Regional Contest Test I. Linguistics Puzzle
    Preface这题yysy真不难,但比赛的时候想出做法后没时间写了,只能遗憾地看着倒计时结束Solution直接上爆搜复杂度肯定会爆,考虑有哪些数是可以不用搜直接推出来的首先样例启发我们\(0,1\)这两个数很好确定,因为\(0\)对应的字母单独出现的次数肯定最多,而\(1\)作为两位的开头出现的次......
  • [ABC326D] ABC Puzzle 题解
    题目链接解法分析这个问题是一个经典的排列谜题,通过回溯算法来穷举所有可能的字符排列,然后验证是否满足行和列约束。这个解决方案可以用于解决类似的谜题,其中需要满足一定的排列条件。通过仔细考虑约束条件,可以加快解决问题的速度,减少不必要的计算。更详细的我写在代码里了。......
  • D - ABC Puzzle -- ATCODER ABC 326
    D-ABCPuzzlehttps://atcoder.jp/contests/abc326/tasks/abc326_dSampleInput1Copy5ABCBCACAABSampleOutput1CopyYesAC..B.BA.CC.BA.BA.C...CBA思路充分利用约束条件,构造算法,避免穷举所有情况,然后再根据约束条件判断情况的合法性。 如下代码,优......