CF1770F Koxia and Sequence(条件统计转组合数计数)
题意简述
给定
分析
第一步:先做一波非常重要的分析
答案要求所有合法序列的所有数的异或,而因为一个合法序列翻转后也是合法序列,因此两个方案的贡献被抵消。那么只有回文序列才有可能有贡献。
若
第二步:考虑如何计数
考虑要让序列符合两个条件。若让序列满足条件二,那么很难做一个使得
按位考虑
第三步:求解
引理:
证明:根据卢卡斯定理,
而
考虑将
引理:(范德蒙德卷积)
我们把它推广到多个组合数相乘的形式,就是
我们把原式后面那坨 sigma 用范德蒙德卷积的推广合并掉,就是:
把组合数化回原来的条件形式,
再把它代回容斥式子,
代码很好写。
int n,x,y;
bool In(int x,int y){return (x&y)==x;}
void solve_the_problem(){
n=rd(),x=rd(),y=rd();
if(n%2==0)return (void)P0;
int ans=0;
per(j,19,0){
int ret=0;
for(int i=y;i;i=(i-1)&y){
if(In((1<<j),i)&&In(x-(1<<j),n*i-(1<<j)))ret^=1;
}
ans+=ret*(1<<j);
}
write(ans);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现