Solution -「多校联训」染色
\(\mathcal{Description}\)
Link.
给定 \(n\) 和 \(q\) 次询问,每次询问给出 \(x,k\),求第 \(x\) 位为 0 且任意两个 1 的下标之差不小于 \(k\) 的长度为 \(n\) 的 01 序列数量。
\(n,q\le10^5\)。
\(\mathcal{Solution}\)
“不小与 \(k\)”可能在复杂度中体现为“\(\div k\)”,考虑根号分治。
对于 \(k\le\sqrt n\),预处理 \(f(k,i)\) 表示不考虑 \(x\) 的限制,长度为 \(i\) 的序列数量。通过全局答案减去 \(x\) 位为 1 的答案可以 \(\mathcal O(1)\) 回答询问;
而对于 \(k>\sqrt n\),1 的数量 \(\le\sqrt n\),枚举 1 的数量,把 0{k-1}1 看做一整块,可以隔板法求方案,在用总方案减去左右方案之积即可 \(\mathcal O(\sqrt n)\) 回答询问。
最终,得到复杂度最坏为 \(\mathcal O((n+q)\sqrt n)\) 的算法。
\(\mathcal{Code}\)
/* Clearink */
#include <cmath>
#include <cstdio>
#define rep( i, l, r ) for ( int i = l, rep##i = r; i <= rep##i; ++i )
#define per( i, r, l ) for ( int i = r, per##i = l; i >= per##i; --i )
const int MAXSN = 316, MAXN = 1e5, MOD = 998244353;
int n, q, thres, f[MAXSN + 5][MAXN + 5], fac[MAXN * 2 + 5], ifac[MAXN * 2 + 5];
inline int sub( int a, const int b ) { return ( a -= b ) < 0 ? a + MOD : a; }
inline int mul( const long long a, const int b ) { return int( a * b % MOD ); }
inline int add( int a, const int b ) { return ( a += b ) < MOD ? a : a - MOD; }
inline int mpow( int a, int b ) {
int ret = 1;
for ( ; b; a = mul( a, a ), b >>= 1 ) ret = mul( ret, b & 1 ? a : 1 );
return ret;
}
inline void init() {
fac[0] = 1;
rep ( i, 1, 2 * n ) fac[i] = mul( i, fac[i - 1] );
ifac[2 * n] = mpow( fac[2 * n], MOD - 2 );
per ( i, 2 * n - 1, 0 ) ifac[i] = mul( i + 1, ifac[i + 1] );
rep ( i, 1, thres ) {
int* fi = f[i]; *fi = 1;
rep ( j, 1, n ) fi[j] = add( fi[j - 1], j >= i ? fi[j - i] : 1 );
}
}
inline int comb( const int n, const int m ) {
return n < 0 || n < m ? 0 : mul( fac[n], mul( ifac[m], ifac[n - m] ) );
}
int main() {
freopen( "color.in", "r", stdin );
freopen( "color.out", "w", stdout );
scanf( "%d %d", &n, &q ), thres = sqrt( n );
init();
for ( int x, k; q--; ) {
scanf( "%d %d", &x, &k );
if ( k <= thres ) {
printf( "%d\n", sub( f[k][n], mul( x >= k ? f[k][x - k] : 1,
n + 1 >= x + k ? f[k][n - x - k + 1] : 1 ) ) );
} else {
int all = 0, lcnt = 0, rcnt = 0;
rep ( i, 0, ( n + k - 1 ) / k ) {
all = add( all, comb( n + k - 1 - i * k + i, i ) );
lcnt = add( lcnt, comb( x - 1 - i * k + i, i ) );
rcnt = add( rcnt, comb( n - x - i * k + i, i ) );
}
printf( "%d\n", sub( all, mul( lcnt, rcnt ) ) );
}
}
return 0;
}
Solution -「多校联训」染色的更多相关文章
- Solution -「多校联训」签到题
\(\mathcal{Description}\) Link. 给定二分图 \(G=(X\cup Y,E)\),求对于边的一个染色 \(f:E\rightarrow\{1,2,\dots,c\ ...
- Solution -「多校联训」排水系统
\(\mathcal{Description}\) Link. 在 NOIP 2020 A 的基础上,每条边赋权值 \(a_i\),随机恰好一条边断掉,第 \(i\) 条段的概率正比于 \(a ...
- Solution -「多校联训」I Love Random
\(\mathcal{Description}\) 给定排列 \(\{p_n\}\),可以在其上进行若干次操作,每次选取 \([l,r]\),把其中所有元素变为原区间最小值,求能够得到的所有不同序 ...
- Solution -「多校联训」朝鲜时蔬
\(\mathcal{Description}\) Link. 破案了,朝鲜时蔬 = 超现实树!(指写得像那什么一样的题面. 对于整数集 \(X\),定义其 好子集 为满足 \(Y\sub ...
- Solution -「多校联训」消失的运算符
\(\mathcal{Description}\) Link. 给定长度为 \(n\) 的合法表达式序列 \(s\),其中数字仅有一位正数,运算符仅有 - 作为占位.求将其中恰好 \(k\) ...
- Solution -「多校联训」假人
\(\mathcal{Description}\) Link. 一种物品有 长度 和 权值 两种属性,现给定 \(n\) 组物品,第 \(i\) 组有 \(k_i\) 个,分别为 \((1,a ...
- Solution -「多校联训」古老的序列问题
\(\mathcal{Description}\) Link. 给定序列 \(\{a_n\}\),和 \(q\) 次形如 \([L,R]\) 的询问,每次回答 \[\sum_{[l,r]\su ...
- Solution -「多校联训」Sample
\(\mathcal{Description}\) Link (稍作简化:)对于变量 \(p_{1..n}\),满足 \(p_i\in[0,1],~\sum p_i=1\) 时,求 \(\ma ...
- Solution -「多校联训」光影交错
\(\mathcal{Description}\) Link. 一个游戏包含若干次卡牌抽取,每次以 \(p_l\) 的概率得到 \(+1\),\(p_d\) 的概率得到 \(-1\),否则得到 ...
随机推荐
- 网络协议学习笔记(八)DNS协议和HttpDNS协议
概述 上一篇主要讲解了流媒体协议和p2p协议,现在我给大家讲解一下关于DNS和HttpDNS的相关知识. DNS协议:网络世界的地址簿 在网络世界,也是这样的.你肯定记得住网站的名称,但是很难记住网站 ...
- CTF-sql-宽字节注入
本文章主要涉及sql宽字节注入注入的原理讲解,如有错误,望指出.(附有目录,如需查看请点右下角) 一.首先介绍一下本篇文章所用到的知识点: 常用到的url编码: 空格:%20 单引号:%27 在sql ...
- rocketmq之延迟队列(按照18个等级来发送)
1 启动消费者等待传入的订阅消息 import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache ...
- 【C++】类-多态
类-多态 目录 类-多态 1. 基本概念 2. 运算符重载 2.1 重载为类的成员函数 2.2 重载为非成员函数 3. 虚函数 4. 抽象类 5. override与final 1. 基本概念 多态性 ...
- 【记录一个问题】go get -u github.com/go-redis/redis出现错误" invalid character '.' after top-level value"
安装某个库的时候依赖于redis库,总是出现这样的错误: go install go: github.com/go-redis/redis/v7@v7.2.0: parsing go.mod: mis ...
- JavaScript获取URL参数方法总汇
现在做页面基本都用AJAX,因此导致操作很麻烦,每次都需要通过JS获取url中的参数值,网上所搜到很多资料,没一次能记住的,也不知道在哪个项目中使用过,现在又需要通过JS获取url参数,因此不能在偷懒 ...
- 深入理解http1.x、http 2和https
转自 https://segmentfault.com/a/1190000015316332 一.HTTP/1.x Http1.x 缺陷:线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制数 ...
- Scala 中下划线的用法
1.存在性类型:Existential types def foo(l: List[Option[_]]) = ... 2.高阶类型参数:Higher kinded type parametersca ...
- 搭服务器之kvm--vnc连接虚拟机连接闪退直接消失 以及virsh shutdown命令无效解决办法。
之前暑期见识到了虚拟化在企业中的应用,感慨不小,以前只是自己在玩儿桌面vmware workstation,安装的虚拟机也没啥大感觉.在公司机房里大家用的dell poweredge 420,8gme ...
- Linux下的ssh、scala、spark配置
注:笔记旨在记录,配置方式每个人多少有点不同,但大同小异,以下是个人爱好的配置方式. 目录 一.配置jdk 二.配置ssh 三.配置hadoop 四.配置scala 五.配置spark 平台:win1 ...