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

题解 - P15434 [蓝桥杯 2025 国 Python B] 三角形构造

这题挺好的。

题目说三角形边长需分别为 $x,y,x|y$,所以想到满足 $x+y>x|y$ 或 $x+(x|y)>y$ 或 $y+(x|y)>x$ 就能拼出非退化的三角形了。

但是一看数据范围,枚举 $y$ 是 $O (x)$ 的时间复杂度,肯定超时了,所以最可能提升效率的方法是利用按位或的性质。易得对于任意的正整数 $a,b$,满足 $a,b \le a|b \le a+b$ 而且 $a|b=a+b$ 时 $a$ 正好为 $b$ 按位取反后的值。所以只需满足 $x+y<x|y$ 就能构造三角形,所以 $x,y$ 的二进制中至少有 $1$ 位相同,要找所有满足该条件的 $y$。

这是经典的排列组合。设 $x,y$ 二进制第 $i$ 位分别为 $x_i,y_i$,$cx$ 为 $x$ 的二进制中 $1$ 的个数。要使 $x+y=x|y$,$x_i=1$ 时 $y_i=0$,$x_i=0$ 时 $y_i \in \{0,1\}$。利用乘法原理,不能构造三角形方案数为 $2^{cx}-1$。最后减 $1$ 是因为不能让 $y$ 二进制每一位都为 $0$,否则不满足 $1 \le y$。以上是使 $x+y=x|y$ 的方案数,答案即 $x-2^{cx}+1$,时间复杂度 $O(\log x)$。

#include<bits/stdc++.h> #define int long long using namespace std; string to2(int num) { string ans; while(num) { ans+=num%2+'0'; num/=2; } reverse(ans.begin(),ans.end()); return ans; } signed main() { int x,cnt=0; cin>>x; string xs=to2(x);//转二进制 for(int i=0;i<xs.size();i++) if(xs[i]=='0')cnt++; cout<<(x-(int)pow(2,cnt)+1);//排列组合 return 0; }
http://www.jsqmd.com/news/454084/

相关文章:

  • 2026年 Elmo国产化伺服驱动器推荐榜单:高功率密度/微型/高端/军工/半导体/关节模组专用,全国产化低压伺服驱动器实力厂家精选 - 品牌企业推荐师(官方)
  • 算法简史!
  • 一篇速通java线程池,看完直接上手用!
  • VMWare安装Centos 8系统
  • 2026年投票小程序开发指南:北京定制化技术服务商深度解析 - 品牌2026
  • Java面试实战:从Spring Boot到微服务架构的循序渐进问答
  • Vue——小白也能学!Day2
  • 智能软开关在配电网重构中的Matlab实践:基于二阶锥规划
  • 好用的监控塔品牌推荐,安徽佳旭钢结构上榜吗? - mypinpai
  • 阻抗分析仪与矢量网络分析仪在阻抗测量中的对比分析
  • 探索 Lumerical - FDTD 软件在光子学领域的奇妙之旅
  • 微算法科技(NASDAQ:MLGO)量子PBFT改进技术:重构联盟链共识的效率与安全
  • 【golang学习之旅】使用VScode安装配置Go开发环境
  • LangChain4j 和 Spring AI,哪个更好?
  • 【Linux】nmcli命令详解
  • 使用FydeOS v22.0系统,想要写代码,在用VS Code编辑仓库内的文件要保存时忽然蹦出:No polkit authentication agent found...如何解决?
  • 双相锁相放大器与单相锁相放大器的区别
  • 2026技术坟墓:Kubernetes的替代者现身——软件测试从业者的专业指南
  • 车辆位姿的含义
  • 2026年磁力泵厂家推荐排行榜:可空载/高温/保温/夹套/分体式/管道/自吸/不锈钢/衬氟/塑料/漩涡/齿轮/多级/船用/液下泵专业选购指南 - 品牌企业推荐师(官方)
  • 车道线检测:基于Matlab的有趣之旅
  • 牛客网金三银四最新Java面试汇总(全网最全、最细、附答案)
  • 黑客都在用的逆向工程“兵器库”:IDA Pro、Ghidra、x64dbg实战演练
  • 如何使用斯坦福锁相放大器SR860测量材料电阻率
  • 【MySQL】数据基本的增删改查操作
  • 每周带你看AI(3.8)
  • 2026.3.8oj总结
  • OpenClaw 多租户企业级架构设计
  • 银行项目相关测试业务流常见问题
  • MyBatis面经