2025“钉耙编程”中国大学生算法设计春季联赛(3)

news/2025/3/26 15:28:46/文章来源:https://www.cnblogs.com/mubai666/p/18790028

反思

\(\qquad\) 赛时只过了一题,被两道定理题卡住了,一道不知道定理,一道代码实现不出来。结果赛后发现另一道模拟其实能做。以后还是得把题都看一遍,不能只看榜单qwq。

1001 数列计数

数论+位运算

/*思路:我们需要让累乘之后的数字为奇数,那么对于每一个 C(ai, bi) 都只能为奇数。因此我们只需要找到 li 范围内有多少个可以使 C(ai, bi) 为奇数的数然后累乘取模即可。那我们如何判断一个组合数的奇偶性呢?就要引出 lucas 定理了。lucas 定理:对于素数 p 存在:C(n, k) % p == C(n/p, k/p)*C(n%p, k%p) % p;而对于判断奇偶性,显然 p = 2 ,此时 lucas 定理便可以变形为:C(n, k) % 2 == C(n/2, k/2)*C(n%2, k%2) % 2;通过观察,我们可以发现,对于一个组合数 C(n, k) % 2 其实就是对其进行二进制拆分,并且累乘的结果,即我们假设 n, k 最高位为第 m 位,那么就可以简单表示为:C(n, k) % 2 == C(n0, k0)*...*C(ni, ki)*...*C(nm, km); (0 <= i <= m);然后我们发现,对于 C(n, k) % 2 二进制拆分后的每一位,我们有四种情况:C(1, 1), C(1, 0), C(0, 1), C(0, 0);而其中只有当 C(0, 1) 时结果为 0;所以我们得出结论,对于组合数 C(n, k) % 2 == 1 我们需要使 k 在二进制表示下的 0, 1 数列被 n 严格包含。即:只有 n 的第 i 位为 1 时,k 的第 i 位才能考虑为 1 的情况。在明确 ai | bi == ai 这一点后,我们就要开始考虑限制条件 li 了。对此,我们可以对 ai 与 li 同时从最高位开始提取,就会出现四种情况,下面对这四种情况进行分类讨论:我们定义 ak, lk 分别为 ai, li 当前提取出的二进制数字。1) lk == 0 时,我们发现 ak 上无论是 1 还是 0 都不会对计数产生贡献。2) lk == 1, ak == 1 时,我们简单地把 ak 位上的数字当作 0, 此时 0~k-1 位上的 1 不论如何都能对计数产生贡献。3) 1k == 1, ak == 0 时,此时,我们便可以隐式判断当情况 2) 出现时 ak 取 1 的计数:我们假设 1101(13) 和 1011(11) 在比较第 3 位时,我们发现 a3 = l3 = 1 ,由 2) 的判断,我们将 0101,0001,0100,0000 加入计数。而比较到第 2 位时,因为 l2 = 0,因此跳过判断。比较到第 1 位时,我们发现 l1 = 1, 而 a1 = 0, 此时,我们发现在第 0 位上的数字不论取何值,加上第 3 位上的数字都不会超过 li,因此我们将 1001, 1000 加入计数,同时退出计数。PS:在遍历过程中,即使没有遇到 3) 的情况,也会由 2) 以同样的原理隐式判断上一次的 2)。4) 当遍历到第 0 位的二进制比较都无法满足 3) 时,我们发现遍历过程中最近的一次 2) 并没有被隐式判断。也就是说可能会出现 (a) 101, (l) 100的情况。我们便要对计数 +1 来将类似 100 的情况加入计数。*/#include <bits/stdc++.h>using namespace std;#define int long long
using ll = long long;
using ull = unsigned long long;
using uint = unsigned;
using pii = pair<int, int>;
const int MOD = 998244353;int calc(int x, int y){int res = 0;int cnt = __builtin_popcount(x); //计算 x 在二进制表示下有多少个 1for(int i = 30; i >= 0; i -- ){ //从最高位开始提取int tx = (x >> i) & 1, ty = (y >> i) & 1; //提取 x, y 当前位的数。if(tx) cnt--; //如果 x 当前位为 1 则说明当前位置往前还剩下 cnt-1 个 1if(!ty) continue; //如果 y 当前位为 0 则跳过if(tx) res += (1 << cnt); //如果 y 与 x 的当前位都是 1 则对往前位置的每一个 1 计算贡献加入计数if(!tx) return res + (1 << cnt); //如果 y 的当前位为 1,但 x 的当前位为 0 则将当前位的所有 1 计算贡献并退出程序}return res + 1; //加上最后一个没有被隐式判断的 1
}void solve(){int n;cin >> n;vector<int> a(n+1), l(n+1);for(int i = 1; i <= n; i ++ ) cin >> a[i];for(int i = 1; i <= n; i ++ ) cin >> l[i];int ans = 1;for(int i = 1; i <= n; i ++ ){ans = 1LL * ans * calc(a[i], l[i]) % MOD; //累乘并取模}cout << ans << endl;
}signed main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while(t--){solve();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904929.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20234120 2024-2025-2 《Python程序设计》实验一报告

20234120 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2341 姓名: 李卓颖 学号:20234120 实验教师:王志强老师 实验日期:2025年3月22日 必修/选修:专业选修课 一、实验内容 (一)准备工作:1.安装Python和PyCharm:访问Python和PyCharm官…

day:28 postman——断言

一.postman 断言 1.断言再test中 状态码是否等于200: tests["Status code is 200"] = responseCode.code === 200; 断言响应时间小于200ms: tests["Response time is less than 200ms"] = responseTime < 200; 断言响应体包含内容: tests["Bod…

XDA论坛打不开的解决办法

开了梯子反而进不去,关掉全局代理 v2 可以添加两行 https://xdaforums.com/; https://www.xda-developers.com/;

国内首个HR智能体平台:开启人力资源管理智能化征程

在当今数字化飞速发展的浪潮中,人工智能已不再是一个遥远的概念,而是实实在在地渗透到了各个领域,深刻改变着我们的工作与生活方式。人力资源管理,这一关乎企业核心竞争力的关键环节,也正经历着AI技术带来的前所未有的变革。HR智能体作为这一变革中的重要成果,正逐渐成为…

爆火开源库!20K星标,一键让网页设计秒变手绘风

今天必须给大伙说说一个超有意思的开源库,在GitHub上已经斩获20K星标啦,它能轻松给网页设计加上手绘风格的“滤镜”,让页面瞬间告别千篇一律,充满艺术感!一、Rough.js是什么?这个名为Rough.js轻量级的图形库,大小才8KB,能赋予网页元素自然又独特的手绘质感。通过一套特…

易路iBuilder智能体平台:AI+HR、全场景、深融合,7大创新应用引领HR管理变革

从国产AI大模型DeepSeek发布至今,国内外人工智能的热度持续居高不下。AI Agent(智能体)作为人工智能领域的重要概念与产品形态,也被广泛提起、认识并应用于千行万业中。本文将基于人力资源领域首个AI Agent垂直应用——易路iBuilder智能体平台的创新实践应用,对智能体在人…

Gitee DevOps 实践指南:本土团队效率提升的新范式

在数字化转型的浪潮中,Gitee DevOps 作为国内领先的一体化研发效能平台,通过深度融合代码托管、CI/CD、项目管理等核心功能,为企业提供了本土化的 DevOps 解决方案。一、Gitee DevOps 的核心价值定位 在数字化转型的浪潮中,Gitee DevOps 作为国内领先的一体化研发效能平台,…

那些正常的动态规划

目录前言动态规划到底是啥?线性dp最长上升子序列子集和子序列和子串的区别内容分析最大上升子序列例题1——[NOIP2004 提高组] 合唱队形分析最长公共子序列最长公共子串平面dp例题2——[NOIP2000 提高组] 方格取数分析例题3——[NOIP2008 提高组] 传纸条分析例题4——最大加权…

3月24日刷题笔记-第六章 流量特征分析-常见攻击事件 tomcat

1、在web服务器上发现的可疑活动,流量分析会显示很多请求,这表明存在恶意的扫描行为,通过分析扫描的行为后提交攻击者IP flag格式:flag{ip},如:flag 我们查看流量包,可以发现有一个外部IP在对常见端口进行SYN扫描,判断出为恶意IPflag{14.0.0.120} 2、找到攻击者IP后请通过…

如何在云效中使用 DeepSeek 等大模型实现 AI 智能评审

除了代码智能补全外,AI 代码智能评审是 DevOps 领域受开发者广泛关注的另一场景了。本文,我们将结合云效代码管理 Codeup、流水线 Flow 和 DeepSeek,分享一种企业可快速自主接入,即可实现的 AI 智能评审解决方案,希望给大家一些启发。作者:崔力强、黄博文 除了代码智能补…