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

降低时间复杂度---一起来ABC

在这里插入图片描述

法一:时间复杂度O(n2)

1. 分析解题思路:
  • 我们要找出满足x + y=z,且x\in[0,a],y\in[0,b],z\in[0,c]的三元组(x,y,z)的个数。

  • 可以通过遍历x和y的所有可能取值,然后根据x + y = z判断z是否在[0,c]范围内,如果在,则找到一个满足条件的三元组。

2. 具体计算过程:
  • 我们使用嵌套循环来遍历x和y的取值。

  • 外层循环遍历x,x从0到a,内层循环遍历y,y从0到b。

  • 对于每一组(x,y),计算z=x + y。如果z满足0\leq z\leq c,则满足条件的三元组个数增加1。

- 用Python代码实现如下:
python
  
a, b, c = map(int, input().split())
count = 0
for x in range(a + 1):
    for y in range(b + 1):
        z = x + y
        if 0 <= z <= c:
            count += 1
print(count)

法2:时间复杂度O(n)

cpp
  
#include <iostream>
using namespace std;

int main() {
    int a, b, c;
    cin >> a >> b >> c;
    int count = 0;
    for (int x = 0; x <= a; ++x) {
        int y_count = max(0, min(b, c - x));
        count += y_count;
    }
    cout << count << endl;
    return 0;
}

在这段代码中:

  1. 首先从标准输入读取三个整数a、b、c。

  2. 然后通过 for 循环遍历x从0到a。

  3. 在每次循环中,计算当前x值下满足条件的y的个数,使用 max(0, min(b, c - x)) 来确保y的个数不会为负数且在合理范围内。

  4. 将每个x对应的y的个数累加到 count 变量中。

  5. 最后输出满足条件的三元组的个数。


http://www.kler.cn/a/593480.html

相关文章:

  • (超详细) ETL工具之Kettle
  • C# 事件机制详解:定义、订阅、触发与应用实践
  • PLC控制柜在技术创新驱动中功能演进 尤劲恩科技
  • 【自用】NLP算法面经(5)
  • MySQL InnoDB引擎中Redo Log、Binlog、Undo Log的原理、执行顺序
  • 【css酷炫效果】纯CSS实现火焰文字特效
  • 【病毒分析】伪造微软官网+勒索加密+支付威胁,CTF中勒索病毒解密题目真实还原!
  • Spring Boot配置与注解的使用
  • 力扣105. 从前序与中序遍历序列构造二叉树(Java实现)
  • 内网渗透练习-红日靶场一
  • pytorch3d学习(四)——批处理(实现多obj文件读取)
  • Unity3D开发AI桌面精灵/宠物系列 【二】 语音唤醒 ivw 的两种方式-Windows本地或第三方讯飞等
  • 【AI知识】导数,偏导,梯度的解释
  • 内网安全-横向移动Kerberos 攻击SPN 扫描WinRMWinRSRDP
  • 详细解析GetOpenFileName()
  • 如何打造安全稳定的亚马逊采购测评自养号下单系统?
  • Solana笔记案例:写一个SOL转账程序
  • C#:使用UDP协议实现数据的发送和接收
  • 量子计算专业书籍,做个比较
  • C++ 核心编程 ——4.9 文件操作