当前位置: 首页 > news >正文

CF1610D思路分享(数论,组合计数)

https://codeforces.com/problemset/problem/1610/D

题意概述

一个长度为 \(m\) 的非空数组 \(b\) 被称为“好的”,需要存在 \(m\) 个序列满足以下条件:

1.第 \(i\) 个序列由 \(b_i\) 个连续整数构成。

2.记第 \(i\) 个序列所有元素的和为 \(sum_i\)\(\sum{sum_i} = 0\)

给定数组 \(a\),求出其所有子序列中“好的”子序列的个数,模 \(10^9+7\)

思路

思考“好的”数组的本质。

令第 \(i\) 个序列元素分别为 \(x_i,x_i+1, \cdots ,x_i+b_i-1\),则 \(sum_i = b_i \cdot (2x + b_i -1)\)

那么:

\[\sum{b_i \cdot (2x + b_i - 1)} = 0 \]

展开得到:

\[\frac{\sum{b_i \cdot (b_i-1)}}{2} = -\sum{x_i \cdot b_i} \]

由裴蜀定理可知,方程有解的条件为:

\[\gcd(b_i) \mid \frac{\sum{b_i \cdot (b_i-1)}}{2} \]


令 $p \cdot \gcd(b_i) = \frac{\sum{b_i \cdot (b_i-1)}}{2} $,则 \(2p = \frac{\sum{b_i \cdot (b_i-1)}}{\gcd(b_i)}\),即:

\[2 \mid \frac{\sum{b_i \cdot (b_i-1)}}{\gcd(b_i)} \]

在模 \(2\) 意义下,考虑如下代换:

\[\gcd(b_i) = 2^t \cdot (2k+1) \]

\[c_i = \frac{b_i}{2^t} \]

那么原式为:

\[2 \mid \frac{\sum{2^t c_i \cdot (2^t c_i - 1)}}{2^t \cdot (2k+1)} \]

即:

\[2\mid \sum{c_i \cdot (2^t c_i - 1)} \]

\(t = 0\) 时,显然成立。

\(t \ne 0\) 时,\(2 \mid \sum{c_i}\)

接下来需要思考 \(t\) 的本质。

\(t = 0\)

$ \gcd(b_i) = 2k+1 $,也就是 \(b_i\) 中存在至少一个奇数,故方案的组成为:在所有为奇数的 \(b_i\) 中选择至少一个元素,为偶数的 \(b_i\) 任意选。

当 $t \ne 0 $ 时

由算数基本定理可知,\(b_i\) 可以被分解成 \(2^{t_i} \cdot (2k_i + 1)\) 形式,且这样的形式唯一。那么代换中的 \(t\) 显然是所有 \(t_i\) 中的最小值,也就是:

\[c_i = \frac{b_i}{2^t} = \frac{2^q \cdot b_i}{2^{t_i}} \]

其中 \(q = t_i - t\)

可见,当 \(t_i > t\) 时,\(c_i\) 为偶数。直观的理解一下:如果 \(t_i > t\),那么当 \(b_i\) 被分解出 \(t\) 这个因数的时候,它仍然还有一部分因数,这部分因数为偶数(因为当剩下因数为奇数的时候,一定对应它唯一的分解形式,也就是分解到 \(t_i\) 了,但是我们的前提是 \(t_i > t\))。

所以当 \(t_i > t\) 时,\(c_i\) 为偶数;\(t_i = t\) 时,\(c_i\) 为奇数。

回想一下数组为“好的”的条件,我们需要所有 \(c_i\) 的和为偶数,那么选择方案的组成为:在所有 \(t_i = t\) 的数中选择偶数个元素,\(t_i > t\) 的数中任意选。

实现

预处理所有元素的 \(t_i\),记录到 \(cnt\) 中,\(cnt_i\) 表示 \(t_i = i\) 的元素数量。同时记录后缀和数组 \(suf\)

对于 \(t = 0\) 的情况,从 \(cnt_0\) 中选至少一个元素的方案数为 \(2^{cnt_0} - 1\),其他数任选的方案数为 \(2^{suf_1}\)

对于 \(t \ne 0\) 的情况,枚举所有 \(t\),在 \(t_i = t\) 的数中选偶数个(至少两个),方案数为 \(2^{cnt_t-1} - 1\),在 \(t_i > t\) 的数中任意选,方案数为 \(2^{suf_{i+1}}\)

最后解释一下在 \(n\) 个数中选偶数个元素的方案数为 \(2^n\) 的原因:对于集合中任意一个元素 \(x\),如果选择了它,剩下需要在 \(n-1\) 个元素中选择奇数个元素;如果不选择它,剩下需要在 \(n-1\) 个元素中选择偶数个元素。这两种贡献是取并的,也就是在 \(n-1\) 个元素中选奇数个元素和偶数个元素的并,即在 \(n-1\) 个元素中任选。但要注意选 \(0\) 个元素也被包含在内。


//author:kzssCCC#include <bits/stdc++.h>
using namespace std;
using ll = long long;const int MOD = 1e9+7;ll qpow(ll a,ll b){ll res = 1;while (b){if (b&1){res = res*a%MOD;}a = a*a%MOD;b >>= 1;}return res;
}void solve(){int n;cin >> n;vector<int> a(n+1);for (int i=1;i<=n;i++){cin >> a[i];}vector<int> cnt(32);for (int i=1;i<=n;i++){for (int j=0;j<32;j++){if (a[i]%(1<<j)==0 && (a[i]/(1<<j))&1){cnt[j]++;break;				}}}vector<int> suf(33);for (int i=31;i>=0;i--){suf[i] = suf[i+1]+cnt[i];}ll res = 0;for (int i=1;i<32;i++){if (cnt[i]<2) continue;ll cur = (qpow(2,cnt[i]-1)-1+MOD)%MOD*qpow(2,suf[i+1])%MOD;res = (res+cur)%MOD;}ll add = (qpow(2,cnt[0])-1+MOD)%MOD*qpow(2,suf[1])%MOD;res = (res+add)%MOD;cout << res << '\n';
}int main(){ios::sync_with_stdio(false);cin.tie(0);int t = 1;// cin >> t;while (t--) solve();return 0;
}
http://www.jsqmd.com/news/710750/

相关文章:

  • 星穹铁道跃迁记录分析工具:如何用开源方案实现数据可视化与概率洞察
  • 维普 AI 率从 47% 降到 6%!率零长文本 5 分钟过维普 AIGC 检测! - 我要发一区
  • 超低成本RISC-V开发板nanoCH32V003硬件解析与开发指南
  • ASCII字节流解码:状态机与缓冲区管理在实时数据处理中的应用
  • 14个月调研2100余家企业!2026上海家装存量翻新七强标杆企业名单出炉 - 资讯焦点
  • 别再只会用串口助手了!手把手教你用C# WinForm打造自己的上位机监控软件(附完整源码)
  • 视觉语言模型突破:CoVT技术解析与实践
  • 年度技术趋势预测
  • AutoGen框架深度解析:微软多智能体对话系统的工程实践
  • 避坑指南:Zynq SDK裸机CAN波特率计算错了?手把手教你查UG585和调BRPR/BTR
  • 评分提升9分!奋飞咨询Ecovadis评级金牌突破案例解析 - 奋飞咨询ecovadis
  • 0.39%入选率严苛筛选:2026上海家装七强“金招牌”企业重磅出炉 - 资讯焦点
  • 如何在Windows上获得MacBook级别的触控体验:Apple Precision Touchpad驱动完全指南
  • BigML机器学习平台:可视化建模与自动化特征工程实战
  • 从边界的审思到实践的奠基——论“认出即松动”作为一种后乌托邦实践哲学
  • 如何确认你的Mac是否支持Turbo Boost Switcher:完整兼容性指南
  • Vim异常退出后,那个烦人的.swp文件到底该怎么删?手把手教你搞定E325报错
  • 手把手教你用frp+WebSocket,把家里的树莓派服务安全暴露到公网(保姆级配置)
  • 2026第一季度上海家装公司调研:八家用户口碑突出、落地能力过硬的装修公司推荐 - 资讯焦点
  • 20252435 实验三《Python程序设计》实验报告
  • 2026年补锌行业报告-赖氨葡锌颗粒行业头部企业排名出炉_补锌品牌 - 资讯焦点
  • 多模态大语言模型的搜索增强技术与实践
  • 如何在2026年继续畅玩经典Flash游戏:CefFlashBrowser完全指南
  • 万方 AIGC 率 60% 降到 5%!0ailv 一键帮毕业生过万方 AIGC 检测! - 我要发一区
  • 蓝凌OA管理员自查指南:这几个未授权接口和配置项,你的系统可能还没修复
  • 基于多任务学习的幽默理解系统设计与优化
  • 别再只用来重放请求了!BurpSuite Repeater的5个隐藏技巧与高效工作流
  • Agent与Workflow自动化架构对比与混合实践
  • 为本地大模型注入联网与工具调用能力:MCP服务器实战指南
  • 手把手调试:基于STM32和DW1000的DS-TWR测距代码详解与避坑