【每日一题】—— C. Yarik and Array(Codeforces Round 909 (Div. 3))(贪心)

🌏博客主页:PH_modest的博客主页
🚩当前专栏:每日一题
💌其他专栏:
🔴 每日反刍
🟡 C++跬步积累
🟢 C语言跬步积累
🌈座右铭:广积粮,缓称王!

一.题目描述

在这里插入图片描述

题目大意:

子数组是数组的连续部分。
Yarik 最近发现了一个由 n n n 个元素组成的数组 a a a ,于是他对寻找一个非空子数组的最大和非常感兴趣。然而,Yarik 不喜欢奇偶校验相同的连续整数,因此他选择的子数组必须有相邻元素的交替奇偶校验。
例如, [ 1 , 2 , 3 ] [1, 2, 3] [1,2,3] 可以接受,但 [ 1 , 2 , 4 ] [1, 2, 4] [1,2,4] 不行,因为 2 2 2 4 4 4 都是偶数且相邻。
你需要帮助 Yarik 找出这样一个子数组的最大和。

题目链接:

C. Yarik and Array(Codeforces Round 909 (Div. 3))

二.思路分析

这题就是贪心求解子序列最大和的题目,只不过多了一点限制条件;

  1. 定义一个maxx先求取当前数组中的最大值
  2. 定义一个sum求取当前子序列的和
  3. 当sum<0的时候需要重新计算和,因为负数加上一个数只会越来越小;同时如果相邻的两数同为奇数或者同为偶数也是不满足条件的(abs(s[i]%2) == abs(s[i-1]%2)),也需要重新计算。需要注意的是元素可能为负数,所以取模的时候需要求取绝对值
  4. 然后将maxx和sum进行比较,求取较大的值放入maxx

三.代码展示

//https://codeforces.com/contest/1899/problem/C
//首先需要判断奇偶,然后用sum存储当前序列的和,如果sum<0就重新计算(因为加上只会更小),求完和之后和之前的值进行比较,取最大的值
//
#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#include<queue>
#include<vector>
#include<cstring>
#define int long long
using namespace std;int s[200020];void solve()
{int n;cin>>n;int maxx=-1e9;for(int i=0;i<n;i++){cin>>s[i];maxx=max(maxx,s[i]);}int sum=s[0];for(int i=1;i<n;i++){if(sum<0||abs(s[i]%2)==abs(s[i-1]%2)){sum=s[i];}else{sum+=s[i];}maxx=max(maxx,sum);}cout<<maxx<<"\n";
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t;cin>>t;while(t--){solve();}return 0;
}

最后:

每日一题系列旨在养成刷题的习惯,所以对代码的解释并不会特别详细,但足够引导大家写出来,选的题目都不会特别难,但也不是特别简单,比较考验大家的基础和应用能力,我希望能够将这个系列一直写下去,也希望大家能够和我一起坚持每天写代码。

之后每个星期都会不定期更新codeforces和atcoder上的题目,想要学习算法的友友们千万别错过了,有什么疑问欢迎大家在评论区留言或者私信博主!

在这里送大家一句话:广积粮,缓称王!

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

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

相关文章

「C++」map和set的使用介绍

&#x1f4bb;文章目录 &#x1f4c4;前言前置知识关联式容器键值对map和set的底层结构 setset的构造函数set 的修改操作set的使用 mapmap的函数map的使用 multiset 和 multimap&#x1f4d3;总结 &#x1f4c4;前言 stl容器分为两类&#xff0c;分别是序列容器和关联式容器&am…

一文讲明 Spring 的使用 【全网超详细教程】

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 前言 目录结构 Spring 的相关代码 都公开在…

「git 系列」git 如何存储代码的?

这里写自定义目录标题 git 文件存储位置git 数据模型示例分析分析前准备命令哈希值 具体示例 不同版本的提交&#xff0c;git 做了什么工作&#xff1f;snapshot vs delta-based vs backup参考资料 git 文件存储位置 想要了解如何存储&#xff0c;首先需要知道存储位置。 当我…

DHCP协议详解

前言 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;是一个局域网的网络协议&#xff0c;使用UDP协议工作&#xff0c;主要有两个用途&#xff1a;给内部网络或网络服务供应商自动分配IP地址&#xff0c;给用户或者内部网络管…

硬件工程师基础能力课

第一课时--基本定理、电阻、电容等 首先了解下面几个概念&#xff0c;基尔霍夫定理&#xff1a;KCL & KVL&#xff0c;叠加定理&#xff0c;戴维南定理&#xff08;电压源等效&#xff09;和诺顿定理&#xff08;电流源等效&#xff09;、奈奎斯特采样定理。 上面说的这些东…

机器视觉工程师吐槽的常见100个名场面

学了后发现真没用&#xff0c;只能越干越多 德创跑的快&#xff0c;苏映视裁的快&#xff0c;上帝说&#xff0c;要有光&#xff0c;我是凌云光。 这群里面有多少从德创跑路的 去年我辛辛苦苦干一年顶两年了&#xff0c;单双休变单休或者无休&#xff0c;节假日全部对半砍。加班…

选硬币该用动态规划

选硬币&#xff1a; 现有面值分别为1角1分&#xff0c;5分&#xff0c;1分的硬币&#xff0c;请给出找1角5分钱的最佳方案。 #include <iostream> #include <vector>std::vector<int> findChange(int amount) {std::vector<int> coins {11, 5, 1}; /…

Sa-Token 整合Java17和SpringBoot

目录 前言引入项目开启登录认证路由拦截鉴权解决兼容问题总结 前言 之前无意中发现Sa-Token权限认证框架&#xff0c;项目十分好用。 项目地址&#xff1a; https://github.com/dromara/sa-token 官网地址&#xff1a; https://sa-token.cc/doc.html#/start/example 我的个人…

【vue实战项目】通用管理系统:首页

前言 本文为博主的vue实战小项目系列中的第三篇&#xff0c;很适合后端或者才入门的小伙伴看&#xff0c;一个前端项目从0到1的保姆级教学。前面的内容&#xff1a; 【vue实战项目】通用管理系统&#xff1a;登录页-CSDN博客 【vue实战项目】通用管理系统&#xff1a;封装to…

2023年中职“网络安全“—Web 渗透测试②

2023年中职“网络安全“—Web 渗透测试② Web 渗透测试任务环境说明&#xff1a;1.访问http://靶机IP/web1/,获取flag值&#xff0c;Flag格式为flag{xxx}&#xff1b;2.访问http://靶机IP/web2/,获取flag值&#xff0c;Flag格式为flag{xxx}&#xff1b;3.访问http://靶机IP/web…

通过bat脚本控制Oracle服务启动停止

1、将Oracle服务全部设置为手动启动 初始安装Oracle之后服务启动状态&#xff1a; 2、服务功能介绍 3、构建服务启动/停止bat脚本 注意&#xff1a;编码选择ANSI(如果编码不是ANSI运行脚本会显示乱码) echo off :main cls echo 当前Oracle服务状态&#xff1a; for /f &quo…

开源情报 (OSINT)

开源情报 (OSINT)是出于情报目的收集和分析公开数据的行为。 什么是开源数据&#xff1f; 开源数据是公众容易获得或可根据要求提供的任何信息。 OSINT 来源可包括&#xff1a; ▶ 报纸杂志文章以及媒体报道▶ 学术论文和发表的研究▶ 书籍和其他参考资料▶ 社交媒体活动▶…