5月18总结

news2025/5/19 10:04:29

一.算法题总结

1.

 解题思路:对于这个题,我最开始想到就是二分,但是头痛的是有三个解,如果我在-100到100之间二分,那么只能得出一个解,然后我就想了一下,这个要求精度,那么0.01这么小,好像可以在0-1之间或者-1-1之间二分,然后我就觉得好像可以遍历这俩百个格子,每个格子长度为一,进行二分求解

#include <iostream>
#include <vector>
#include <algorithm>
#define ll long long
using namespace std;

double a, b, c, d;
double f(double x) {
    return a * x * x * x + b * x * x + c * x + d;
}

int main() {
    
    cin >> a >> b >> c >> d;
    int ans = 0;

    for (int i = -100; i < 100; i++) {
        if (ans == 3)break;
        double l = i;
        double r = i + 1;
        double f1 = f(l);
        double f2 = f(r);
        if (f1 == 0) {
            ans++;
            printf("%.2f ", l);
            continue;
        }
        if (f1 * f2 < 0) {
            while (r - l >= 0.001) {
                double mid = (l + r) / 2;
                if (f(mid) * f(l) <= 0)
                    r = mid;
                else
                    l = mid;
            }
            printf("%.2f ", l);
            ans++;
        }
    }
    return 0;
}

2.

解题思路:对于这个题,我写过Section I,所以就看出了要用贪心, 但在这个贪心要怎么用呢,也没给我个具体的数,让区间的和小于某个数,这个时候,我想起了二分,用二分来猜数的大小,而这个数的大小,就是看这个区间的是否大于它,这就可以贪心了

#include <iostream>
#include <vector>
#include <algorithm>
#define ll long long
using namespace std;

bool isPossible(int mid, const vector<int>& nums, int m) {
    int count = 1;
    int current_sum = 0;
    for (int num : nums) {
        if (current_sum + num <= mid) {
            current_sum += num;
        }
        else {
            current_sum = num;
            count++;
            if (count > m) {
                return false;
            }
        }
    }
    return true;
}

int main() {
    int n, m;
    cin >> n >> m;
    vector<int> nums(n);
    int max_num = 0;
    int total_sum = 0;
    for (int i = 0; i < n; ++i) {
        cin >> nums[i];
        max_num = max(max_num, nums[i]);
        total_sum += nums[i];
    }

    int left = max_num;
    int right = total_sum;
    int answer = total_sum;

    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (isPossible(mid, nums, m)) {
            answer = mid;
            right = mid - 1;
        }
        else {
            left = mid + 1;
        }
    }

    cout << answer << endl;
    return 0;
}

3.

解题思路:今天写的最难的一个题,其实怪自己眼挫,没注意到(尽可能让前面的人少抄),其实这个题的本质也是贪心+二分,我就是这么写的,思路和上面的题一样,但是一直只能过4个,然后看了一下别人的题解,发现漏了个条件(尽可能让前面的人少抄),有了这个以后,那就反过来在对答案抄一边就行了

#include <iostream>
#include <vector>
#include <algorithm>
#define ll long long
using namespace std;

int m, k;
struct lr {
    ll l, r;
};
vector<lr> len;

bool check(ll x, vector<ll>& nums) {
    ll sum = 0;
    int cnt = 1;
    vector<lr> temp;
    lr current; current.l = 1;

    for (int i = 1; i <= m; i++) {
       if (nums[i] > x) return false;

        if (sum + nums[i] <= x) {
            sum += nums[i];
        } else {
            current.r = i - 1;
            temp.push_back(current);
            cnt++;
            sum = nums[i];
            current.l = i;
        }
        if (cnt > k) return false;
    }
    current.r = m;
    temp.push_back(current);

    if (cnt == k) {
        len = temp;
        return true;
    }
    return cnt<=k;
}

void check2(ll x, vector<ll>& nums) {
    ll sum = 0;
    int cnt = 1;
    vector<lr> temp;
    lr current; current.r = m;

    for (int i = m; i >= 1; i--) {
        if (sum + nums[i] <= x) {
            sum += nums[i];
        } else {
            current.l = i + 1;
            temp.push_back(current);
            cnt++;
            sum = nums[i];
            current.r = i;
        }
    }
    current.l = 1;
    temp.push_back(current);

    reverse(temp.begin(), temp.end());
    len = temp;
}

int main() {
    cin >> m >> k;
    vector<ll> nums(m + 1);

    ll left = 0, right = 0;
    for (int i = 1; i <= m; i++) {
        cin >> nums[i];
        right += nums[i];
        if (nums[i] > left) left = nums[i];
    }

    ll ans = right;
    while (left <= right) {
        ll mid = (left + right) / 2;
        if (check(mid, nums)) {
            ans = mid;
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }

    // 确保前面的人尽可能少抄写
    check2(ans, nums);

    for (int i = 0; i < k; i++) {
        cout << len[i].l << " " << len[i].r << endl;
    }

    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux Bash | Capture Output / Recall

注&#xff1a;本文为 “Linux Bash | Capture Output / Recall” 相关文章合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;略作重排。 Automatically Capture Output of the Last Command Into a Variable Using Bash 使用 Bash自动将最后一个命令的输出捕获到…

2025/5/18

继续研究一下大佬的RAG项目。开始我的碎碎念。 RAG可以分成两部分&#xff1a;一个是问答&#xff0c;一个是数据处理。 问答是人提问&#xff0c;然后查数据库&#xff0c;把查的东西用大模型组织成人话&#xff0c;回答人的提问。 数据处理是把当下知识库里的东西&#xf…

基于Quicker构建从截图到公网图像链接获取的自动化流程

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言预备内容转webp程序PicGo设置Quicker设置视频演示总结互动致谢参考 前言 在自建博…

LeetCode算 法 实 战 - - - 双 指 针 与 移 除 元 素、快 慢 指 针 与 删 除 有 序 数 组 中 的 重 复 项

LeetCode算 法 实 战 - - - 双 指 针 与 移 除 元 素、快 慢 指 针 与 删 除 有 序 数 组 中 的 重 复 项 第 一 题 - - - 移 除 元 素方 法 一 - - - 双 重 循 环方 法 二 - - - 双 指 针方 法 三 - - - 相 向 双 指 针&#xff08;面 对 面 移 动&#xff09; 第 二 题 - - -…

uniapp自定义日历计划写法(vue2)

文章目录 uniapp自定义日历计划写法(vue2)1、效果2、实现源码前言:我们有时候需要实现的日历找不到相应的插件的时候,往往需要手动去写一个日历,以下就是我遇到这样的问题时,手搓出来的一个解决方案,希望可以帮助到更多的人。创作不易,请多多支持uniapp自定义日历计划写…

Java IO框架

I/O框架 流 流的分类&#xff1a; 按方向&#xff1a; 输入流&#xff1a;将存储设备的内容读入到内存中 输出流&#xff1a;将内存的内容写入到存储设备中 按单位&#xff1a; 字节流&#xff1a;以字节为单位&#xff0c;可以读取所有数据 字符流&#xff1a;以字符为单…

数据库2——查询

查询 学习内容学习感受 学习内容 一、实验目的与要求&#xff1a; 1、掌握SQL单表及多表之间的查询 2、掌握统计及分组函数 二、实验内容&#xff1a; 1.简单查询 ① 从fruits表中检索s_id为100的供货商所供货的水果名和价格 源码&#xff1a; SELECT f_name, f_price FROM…

Android 性能优化入门(一)—— 数据结构优化

1、概述 一款 app 除了要有令人惊叹的功能和令人发指交互之外&#xff0c;在性能上也应该追求丝滑的要求&#xff0c;这样才能更好地提高用户体验&#xff1a; 优化目的性能指标优化的方向更快流畅性启动速度页面显示速度(显示和切换)响应速度更稳定稳定性避免出现 应用崩溃&…

数据库中的锁机制

目录 数据库中的锁机制:原理、分类与实际案例详解 一、数据库锁的核心作用与基本概念 1.1 为什么需要数据库锁? 1.2 锁的分类 二、锁机制的实现与典型场景 2.1 共享锁(Shared Lock) 工作原理 适用场景 代码示例(MySQL) 案例分析 2.2 排他锁(Exclusive Lock) …

【网络入侵检测】基于Suricata源码分析运行模式(Runmode)

【作者主页】只道当时是寻常 【专栏介绍】Suricata入侵检测。专注网络、主机安全&#xff0c;欢迎关注与评论。 1. 概要 &#x1f44b; 在 Suricata 中抽象出线程、线程模块和队列三个概念&#xff1a;线程类似进程&#xff0c;可多线程并行执行操作&#xff1b;监听、解码、检…

Linux常用命令(十四)

目录 vi编辑器命令 1-编辑模式 1&#xff09;准备一个txt文件并且进入vi 2&#xff09;按i进入编辑模式 3&#xff09;按o进入编辑模式 4&#xff09;按a进入编辑模式 ​ 2-底行模式 1&#xff09;退出vim 2&#xff09;撤销上次操作 3&#xff09;设置行号底行模式 4&#xff…

规则联动引擎GoRules初探

背景说明 嵌入式设备随着物联网在生活和生产中不断渗透而渐渐多起来&#xff0c;数据的采集、处理、分析在设备侧的自定义配置越来越重要。一个可通过图形化配置的数据处理过程&#xff0c;对于加速嵌入式设备的功能开发愈发重要。作为一个嵌入式软件从业者&#xff0c;笔者一…

基于OpenCV中的图像拼接方法详解

文章目录 引言一、图像拼接的基本流程二、代码实现详解1. 准备工作2. 特征检测与描述detectAndDescribe 函数详解&#xff08;1&#xff09;函数功能&#xff08;2&#xff09;代码解析&#xff08;3&#xff09;为什么需要这个函数&#xff1f;&#xff08;4&#xff09;输出数…

AI大模型学习二十六、使用 Dify + awesome-digital-human-live2d + ollama + ChatTTS打造数字人

一、说明 数字人&#xff08;Digital Human&#xff09; 是指通过人工智能&#xff08;AI&#xff09;、计算机图形学、语音合成、动作捕捉等技术创建的虚拟人物。它们具备高度拟人化的外观、语言、表情和动作&#xff0c;能够与人类进行交互&#xff0c;甚至承担特定社会角色。…

HTML-3.2 表格的跨行跨列(课表制作实例)

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 系列文章目录 HTML-1.1 文本字体样式-字体设置、分割线、段落标签、段内回车以及特殊符号 HTML…

Spring Cloud Sentinel 快速入门与生产实践指南

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言&#xff1a;流量洪峰下的微服务守卫战 &#x1f6e1;️一、Sentinel 核心架构解析1.1 Sentinel 整体架构1.2 核心处理流程 二、快速入门实战2.1 环境搭建全流程…

Android平台GB28181设备接入与功能支持详解

GB28181协议作为中国国家标准&#xff0c;广泛应用于安防、智慧城市和交通监控等领域。大牛直播SDK提供了全面支持GB28181设备接入的技术方案&#xff0c;能够有效帮助开发者实现设备的快速接入与管理。在本文中&#xff0c;我们将深入介绍大牛直播SDK在Android平台上对于GB281…

mvc-ioc实现

IOC 1&#xff09;耦合/依赖 依赖&#xff0c;是谁离不开谁 就比如上诉的Controller层必须依赖于Service层&#xff0c;Service层依赖于Dao 在软件系统中&#xff0c;层与层之间存在依赖。我们称之为耦合 我们系统架构或者设计的一个原则是&#xff…

Windows 11 C:\Windows\Web\Wallpaper

Windows 11 C:\Windows\Web\Wallpaper 纯色壁纸自定义 没一个好看的

Spring Web MVC————入门(3)

今天我们来一个大练习&#xff0c;我们要实现一个登录界面&#xff0c;登录进去了先获取到登录人信息&#xff0c;可以选择计算器和留言板两个功能&#xff0c;另外我们是学后端的&#xff0c;对于前端我们会些基础的就行了&#xff0c;知道ajax怎么用&#xff0c;知道怎么关联…