c++2024寒假J312实战班2.4

news2024/11/17 22:46:14

长话短说,简明扼要一直是我的行事风格,如有不精准的地方,就到网上去搜,好吧。

今天分享我们做的四道题,都挺简单的,就是难思考。

题目列表:

        1.Maximum Subarray Sum

                2.分解因数

                        3.公交换乘

                                4.Vacation

我们先来看一下第一道题。

Maximum Subarray Sum

        我们先看一下题目,把英文翻译成中文就是“最大子数组和”。结合这个再看一下题面:

Given an array of n integers, your task is to find the maximum sum of values in a contiguous, nonempty subarray.

意思就是:

给定一个包含n个整数的数组,计算连续非空子数组元素和的最大值。

我们再来理解一下这段话:
比如输入:

8 (n个数据)
-1 3 -2 5 3 -5 2 2 (每个元素的值,一共n个元素)

输出:

9

        问什么,我们来看一下,最长的应该是第2个(3),到第5个(3)。加起来就是3+-2+5+3 = 9。问什么后面的不算呢,因为|-5| 和 2 + 2 = 4,那个大? 肯定 |-5| 更大呀,所以最后的答案一定小于0,就会产生反向效益让答案减小

我门就有这样的解题思路:
以 这个元素 结尾连续子序列最大和。如果将 这个元素 加入之前子序列和能够使得和更大,就将 这个元素 加入;否则重新开始一个新的子序列

我们就看一下答案:

//Maximum Subarray Sum
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main() {
    int n;
    cin >> n;
    vector<LL> A(n);
    for (LL &a : A) cin >> a;
    LL d = A[0], maxd = d;
    for(int i = 1; i < n ; i++)
        d = max(A[i], d + A[i]), maxd = max(maxd, d);  
    cout << maxd << '\n';
    return 0;
}

尽量手写,不要复制,可以加强对代码的理解。

分解因数

这个没什么难度吧。跑一下样例:
2有2一个(因为1不算),20有2*10,2*2*5,4*5,20,4种。

// 分解因数
#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
typedef long long LL;
vector<int> F;
LL dfs (int k, int a){
    if (a == 1) return 1; //如果a = 1了是不是就找到一种方案了
    LL ans = 0;
    for (int i = k, sz = F.size(); i < sz; i++)
        if (a % F[i] == 0) ans += dfs(i, a / F[i]); //递归求解
    return ans;
}
int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0, a; i < n; i++){
        cin >> a, F.clear(); // 输入,并清空
        for (int j = 2; j <= a; j++)
            if (a % j == 0) F.push_back(j);// 因数
        printf ("%lld\n", dfs (0, a));
    }
    return 0; 
}

 公交换乘

 

这里样例解释,和思路都有了,我们就设置一个结构体,把时间,花费,和是公交车还是地铁,存起来。

代码如下:

// 公交换乘
#include <bits/stdc++.h>
using namespace std;
struct Item {
  int a;            // 0代表地铁,1代表公交车
  int price, time;  // 票价, 时间
};
int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  int n;
  cin >> n;
  Item it;
  list<Item> s;  // 地铁票,按照时间递增排序, 相当于队列,底层是双向链表
  int ans = 0;
  for (int i = 0; i < n; i++) {
    cin >> it.a >> it.price >> it.time;  // 输入一条新的记录
    if (it.a == 0) {                     // 地铁
      ans += it.price, s.push_back(it);
      continue;
    }                    // 下面考虑公交
    auto p = s.begin();  // 过期的地铁票要全部删除
    while (p != end(s) && it.time - p->time > 45) p = s.erase(p);
    while (p != end(s) && p->price < it.price) p++;  // 跳过金额不够的优惠券
    if (p != end(s))  // p就指向一张优惠券,可以乘车的
      s.erase(p);  // 用一张优惠票乘车并且删除(链表可以在中间删除)
    else
      ans += it.price;  // 只能掏钱了
    }
    printf("%d\n", ans);
    return 0;
}

最后一个题:

 Vacation

题目够简单了吧。

这里涉及了一个知识点:

max(a , b)这是不是原来的写法,我可以改成这样:max({a,b,c,d,e,f··········})。自己玩儿一下。

 

// Vacation
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  int n;
  cin >> n;
  vector<vector<LL>> D(n + 1, vector<LL>(3, 0));
  // D[i,j]: 第i天活动为j,[1...i]天对应的答案
  for (int i = 1; i <= n; i++)
    for (int j = 0, a; j < 3; j++) {  // 第i天为活动为j
      cin >> a;
      for (int lj = 0; lj < 3; lj++)  // 第i-1天为lj
        if (lj != j) D[i][j] = max(D[i][j], D[i - 1][lj] + a);
    }
  return printf("%lld\n", max({D[n][0], D[n][1], D[n][2]})), 0;
}

谢谢大家观看。

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

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

相关文章

05-Java原型模式 ( Prototype Pattern )

原型模式 摘要实现范例 原型模式&#xff08;Prototype Pattern&#xff09;是用于创建重复的对象&#xff0c;同时又能保证性能原型模式实现了一个原型接口&#xff0c;该接口用于创建当前对象的克隆当直接创建对象的代价比较大时&#xff0c;则采用这种模式 例如&#xff0c…

用bootstrap结合jQuery实现简单的模态对话框

嗨害嗨&#xff0c;我又来了奥。今天呢&#xff0c;给大家分享一个工作中常用到的插件——模态对话框的用法。想必大家在工作中也遇到很多页面&#xff0c;需要用模态对话框进行交互的吧&#xff0c;现在呢&#xff0c;就让我们一起来了解一下它的使用吧。 首先&#xff0c;我…

《动手学深度学习(PyTorch版)》笔记8.3

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

【RabbitMQ(二)】:Exchange 详解 | Message Convert 消息转换器

文章目录 03. 使用 Java 代码去操控 RabbitMQ3.1 快速入门3.1.1 创建父子项目3.1.2 编写代码 3.2 Work 模型3.3 RabbitMQ 中的三类交换机3.3.1 Fanout 扇出交换机3.3.2 Direct 交换机3.3.3 Topic 交换机 3.4 声明队列交换机3.4.1 方式一&#xff1a;书写 Config 类3.4.2 方式二…

MySQL篇之回表查询

一、聚集索引 将数据存储与索引放到了一块&#xff0c;索引结构的叶子节点保存了行数据。特点&#xff1a;必须有,而且只有一个。 聚集索引选取规则: 1. 如果存在主键&#xff0c;主键索引就是聚集索引。 2. 如果不存在主键&#xff0c;将使用第一个唯一&#xff08;UNIQUE&am…

算法学习——LeetCode力扣栈与队列篇2

算法学习——LeetCode力扣栈与队列篇2 150. 逆波兰表达式求值 150. 逆波兰表达式求值 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。…

ClickHouse--01--简介

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. ClickHouse 简介官网&#xff1a; [https://clickhouse.com/docs/zh](https://clickhouse.com/docs/zh) 1.1 大数据处理场景1.2 什么是 ClickHouse1.3 OLAP 场景…

Tuxera NTFS2024永久免费版磁盘读写软件

Tuxera NTFS 2024由Tuxera公司开发&#xff0c;是一款专为Mac系统设计的NTFS磁盘读写软件。以下是这款软件的具体优势&#xff1a; 全面的读写功能&#xff1a;Tuxera NTFS 2024允许Mac用户全面读写NTFS格式的硬盘、U盘、SD卡等存储设备。这意味着用户可以在Mac上自由读取和写…

Android Graphics 图像显示系统 - 开篇

“ 随着学习的不断深入和工作经验的积累&#xff0c;欲将之前在博客中整理的Android Graphics知识做进一步整理&#xff0c;并纠正一些理解上的错误&#xff0c;故开设Graphics主题系列文章 ” 序言 由于工作需要&#xff0c;也源于个人兴趣&#xff0c;终于下决心花时间整理一…

gem5学习(19):gem5内存系统——The gem5 Memory System

目录 一、Model Hierarchy 二、CPU 三、Data Cache Object 四、Tags & Data Block 五、MSHR and Write Buffer Queues 六、Memory Access Ordering 七、Coherent Bus Object 八、Simple Memory Object 九、Message Flow 1、Memory Access Ordering&#xff08;re…

[每周一更]-(第86期):PostgreSQL入门学习和对比MySQL

入门学习PostgreSQL可以遵循以下步骤&#xff1a; 安装 PostgreSQL&#xff1a; 首先&#xff0c;你需要在你的计算机上安装 PostgreSQL。你可以从 PostgreSQL 官方网站 下载适合你操作系统的安装包&#xff0c;并按照官方文档的指导进行安装。 学习 SQL&#xff1a; PostgreS…

【JS逆向三】逆向某某网站的sign参数,并模拟生成仅供学习

逆向日期&#xff1a;2024.02.06 使用工具&#xff1a;Node.js 类型&#xff1a;webpack 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 可使用AES进行解密处理&#xff08;直接解密即可&#xff09;&#xff1a;AES加解密工具 1、打开某某…

深入理解Go的垃圾回收机制

导语 如果你是一位Golang的开发者&#xff0c;你一定对于语言特性和详细结构有所了解。但是&#xff0c;你是否曾经停下来深入研究过Golang背后复杂而强大的垃圾回收&#xff08;GC&#xff09;机制&#xff1f;在这篇文章中&#xff0c;我们将具体深入探讨Golang垃圾回收机制…

fast.ai 深度学习笔记(三)

深度学习 2&#xff1a;第 1 部分第 6 课 原文&#xff1a;medium.com/hiromi_suenaga/deep-learning-2-part-1-lesson-6-de70d626976c 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这…

HiveSQL——不使用union all的情况下进行列转行

参考文章&#xff1a; HiveSql一天一个小技巧&#xff1a;如何不使用union all 进行列转行_不 union all-CSDN博客文章浏览阅读881次&#xff0c;点赞5次&#xff0c;收藏10次。本文给出一种不使用传统UNION ALL方法进行 行转列的方法,其中方法一采用了concat_wsposexplode()方…

记录一次centos 使用selenium运行环境

这里写自定义目录标题 宝塔面板 安装 selenium安装google-chrome 宝塔面板 安装 selenium 安装google-chrome yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 查看chrome版本 google-chrome --version 下载对应chrome版本的chro…

【Vue3】解决路由缓存问题(响应路由参数的变化)

官方文档解释&#xff1a; 解决问题的思路: 让组件实例不复用,强制销毁重建监听路由变化,变化之后执行数据更新操作 方案一&#xff1a;给router-view添加key 以当前路由完整路径为key 的值&#xff0c;给router-view组件绑定 <RouterView :key"$route.fullPath&qu…

部门人力分配 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 部门在进行需求开发时需要进行人力安排。当前部门需要完成 N 个需求&#xff0c;需求用 requirements[i] 表示&#xff0c;requirements[i] 表示第 i 个需求的工作…

【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-Turbo编码原理

目录 Turbo码&#xff1a;无线通信中的革命性技术 引言 一、Turbo码的基本原理 1.1 卷积码基础&#xff1a; 1.2 Turbo码的构造&#xff1a; 1.2.1 分量编码器 1.2.2 随机交织器 1.2.3 穿刺和复接单元 1.3 编码器结构的重要性和影响 1.4 迭代解码&#xff1a; 1.4.1 …

HiveQL——不借助任何外表,产生连续数值

注&#xff1a;参考文章&#xff1a; HiveSql一天一个小技巧&#xff1a;如何不借助其他任何外表&#xff0c;产生连续数值_hive生成连续数字-CSDN博客文章浏览阅读1.3k次。0 需求描述输出结果如下所示&#xff1a;12345...1001 问题分析方法一&#xff1a;起始值&#xff08;…