蓝桥刷题--四元组问题和肖恩的投球游戏加强版

news2024/11/26 14:27:20

1.四元组问题

我的这个代码有点问题,我也找不出来,哪位大佬指正一下

// 四元组问题
//思路
// 是否存在 a < b < c < d, 使得nums[d] < nums[c] < nums[a] < nums[b]
//分别维护二元组 (a, b) 和 (c, d), 对合法 b 维护前缀 max 的 nums[a], 同理维护 (c, d) 等等, 枚举c即可
//所以 要对每个 b 找到最大的nums[a] 使得a < b且 nums[a] < nums[b] 
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define inf 1,000,000,000

void solve(const int &Case)
{
	int n; cin >> n;
	vector<int> a(n);
	for(auto &x : a)cin >> x;
    vector<int> pre(n, (-inf - 1)), suf(n);
	int mn = (inf + 1);
	set<int> s; // 前缀的 nums[a] 的值 
	for (int i = 0;i < n; ++ i)
	{
		// 找大于等于nums[b] 的 num[a] 中的最小值 
		auto it = s.lower_bound(a[i]);
		if(it == s.begin());
		else 
		{
			it = prev(it); // 获得小于 nums[b] 的 nums[a] 中的最大值 
			int p = *it;
			pre[i] = p; // pre[i] 记录的是合法的 b 的值的nums[a] 的前缀 max 
		}
		s.insert(a[i]);
	}
	for(int i = n - 1;i >= 0; -- i)
	{
		if(a[i] > mn) // nums[c] > nums[d]
		{
			// sud[i] 表示 c = i时是否存在合法的 d 满足 
			suf[i] = 1;
		}
		mn = min(mn, a[i]);
	}
	for(int i = 1;i < n; ++ i)pre[i] = max(pre[i - 1], pre[i]);
	for(int i = 1;i < n - 1; ++ i) // 枚举c = i + 1 
	{
		if(pre[i] > a[i + 1] && suf[i + 1])
		{
			cout << "YES\n";
			return;
		}
	}
	cout << "NO\n";
}

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t = 1;
	for(int i = 1;i <= t; ++ i)
		solve(i);
	return 0;
}

这个是我学的对的

思路:

把四个数的不等式关系降低为3个数的不等式关系,如果我们已经判断num[c]<nums[a]<nums[b]。

那么我们只需要再判断下标c的后面是否存在比nums[c]小的数据。这里我们可以通过另外一个数组min_r来求出每一个num[i]后面的最小值min_r[i]即可。

以下是详细的解题思路:

1.构建一个单调递减栈st存储元素。

栈顶st.top()表示目前的最大值nums[b]。并需要用一个k来不断刷新最大值。

2.依次遍历数组nums,nums[i]表示当前正在遍历第i个元素。

如果栈为空,则入栈;若不为空且nums[i]>st.top(),则弹出栈顶元素

并更新最大值K,直到num[i]>st.top()不成立,最后一次出栈的元素一定是nums[a]。

最后一次出栈时,k为nums[a]的值。

再继续遍历判断nums[i]<k是否成立,若成立,则找到了nums[c]

(此时恰好构成了一个完整的nums[c]<nums[a]<nums[b])

4.判断下标c的后面是否存在一个比nums[c]还要小的数nums[d]

若min_r[i]<nums[c],则返回true

#include<bits/stdc++.h>
using namespace std;

bool FoursNumberFind(vector<int>&nums){
  stack<int>st;
  int n = nums.size(),k = INT_MIN, INF = INT_MAX;

  //用min_r[i]来存储num[i]右边的最小值nums[i+1]
  vector<int>min_r(n,INF);

  //i的初值为什么是n-2,下标从0开始,范围为0~n-1,因为需要找num[i]右边的最小值nums[i+1]
  for(int i = n-2;i>=0;--i){
    min_r[i] = min(min_r[i+1],nums[i+1]);
  }


  //用单调栈求下标未nums[c]<nums[a]<nums[b]的情况
  for(int i = 0;i<n;i++){
    if(nums[i]<k){
      if(nums[i]>min_r[i])return true;
      
    }
  
    while(!st.empty() && st.top()<nums[i]){
      k = max(k,st.top());
      st.pop();
    }

    st.push(nums[i]);
  }
  
  return false;
}
int main(){
  
  ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  int n;
  cin>>n;
  vector<int>nums(n);

  for(int i = 0;i<n;i++) cin>>nums[i];
  if(FoursNumberFind(nums)) cout<<"YES"<<endl;
  else cout<<"NO"<<endl;

  return 0;
}

2.肖恩的投球游戏加强版

样例输入

4 4 2
3 2 9 10
7 2 1 7
10 4 8 4
1 1 2 1
4 1 4 3 1
3 3 4 4 3

样例输出

3 2 9 10 
7 2 1 7 
10 4 11 7 
2 2 6 4 
#include <bits/stdc++.h>
using namespace std;
#define int long long 
const int N = 1000 + 3;
int a[N][N], d[N][N];

void solve()
{
 int n, m, q; cin >> n >> m >> q;
 for (int i = 1;i <= n; ++ i)
  for(int j = 1;j <= m; ++ j)
    cin >> a[i][j]; // 输入

 for(int i = 1;i <= n; ++ i)
   for(int j = 1;j <= m; ++ j)
    d[i][j] = a[i][j] - a[i][j - 1]; // 差分
 
 while(q -- )
 {
   int x1, y1, x2, y2, c; cin >> x1 >> y1 >> x2 >> y2 >> c;
   for(int i = x1;i <= x2; ++ i)
   {
		d[i][y1] += c; // 只取(x1,y1),(x2,y2)
		d[i][y2 + 1] -= c;
   }
	
 }

 for (int i = 1;i <= n; ++ i)
    for(int j = 1;j <= m; ++ j)
      a[i][j] = a[i][j - 1] + d[i][j]; // 前缀和还原

 for(int i = 1;i <= n; ++ i)
    for(int j = 1;j <= m; ++ j)
      cout << a[i][j] << " \n"[j == m]; // 输出
}

signed main()
{
 ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
 solve();
 return 0;
}

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

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

相关文章

安卓Android入门

安卓作为日常生活中不可缺少的移动操作系统&#xff0c;在5G的发展和应用过程中发挥着其重要的作用。 5G是第五代移动通信技术&#xff0c;拥有更快的速度、更高的带宽、更低的延迟和更大的连接密度。这一技术的快速发展为移动设备和应用提供了更多的可能性。 安卓和5G的关系…

低代码 + 大模型,让业务系统智能化,加速想法落地

1 AI 时代下的应用 大模型来了&#xff0c;每个行业/领域都在融合大模型。作为低代码开发的探索者&#xff0c;今天我们来聊聊业务系统是如何融合大模型实现智能化的。 我们用百度内部实际应用场景来举例。比如请假&#xff0c;智能业务助手可以帮你&#xff1a; 了解…

卸载torch并更新版本,torch-gpu的下载安装--亲测有效!!

以前一直抱怨实验室的cuda版本&#xff0c;以前是10.1&#xff0c;导致只能安装最低配版本的torch&#xff0c;也就是torch1.8.1&#xff0c;现在内核版本和驱动都更新了&#xff0c;变成了cuda11.4&#xff0c;以前的环境都没办法跑代码&#xff0c;只能重新进行卸载安装。 1…

计算机毕业设计-基于Python的“哔哩哔哩视频网”视频热度分析

概要 在21世纪的今天&#xff0c;网络发展越来越快&#xff0c;网上的娱乐方式也越来越多样化&#xff0c;而如今在网上观看视频消遣时间越来越受到大众的青睐。Bilibili视频网站是现当下年轻人最受欢迎的一个视频网站。有调查显示&#xff0c;直到2019年的10月份&#xff0c;B…

flowable-ui部署

版本 java: java8+tomcat: apache-tomcat-9.0.87flowable: flowable-6.8.1mysql驱动: mysql-connector-java-8.0.30.jar 注意:版本一定要对,否则启动报错执行数据库脚本 创建数据库flowable执行脚本,脚本位于解压flowable-6.8.1.zip后的flowable-6.8.1/database/create/all/…

机器学习——终身学习

终身学习 AI不断学习新的任务&#xff0c;最终进化成天网控制人类终身学习&#xff08;LLL&#xff09;&#xff0c;持续学习&#xff0c;永不停止的学习&#xff0c;增量学习 用线上收集的资料不断的训练模型 问题就是对之前的任务进行遗忘&#xff0c;在之前的任务上表现不好…

MySQL数据库的基本概念与安装

目录 引言 一、数据库的基本概念 &#xff08;一&#xff09;数据、表与数据库 1.数据(Data) 2.表 3.数据库 &#xff08;二&#xff09;数据库管理系统 &#xff08;三&#xff09;数据库系统 二、数据库的发展 三、主流数据库的介绍 &#xff08;一&#xff09;关…

基于BusyBox的imx6ull移植sqlite3到ARM板子上

1.官网下载源码 https://www.sqlite.org/download.html 下载源码解压到本地的linux环境下 2.解压并创建install文件夹 3.使用命令行配置 在解压的文件夹下打开终端&#xff0c;然后输入以下内容&#xff0c;其中arm-linux-gnueabihf是自己的交叉编译器【自己替换】 ./config…

杰发科技AC7801——读取Flash数据做CRC校验

查看Keil的编译结果发现总共6160个字节。计算结果如下&#xff0c; 代码如下 #include "ac780x_crc.h" #include "ac780x.h" #include "ac780x_debugout.h" #include "string.h" #include "ac780x_eflash.h"#define TestSi…

2024年第二届亚洲前沿图像处理会议(AAIP 2024)即将召开!

2024年第二届亚洲前沿图像处理会议(AAIP 2024)将于2024年7月26-28日在泰国曼谷召开。本次会议由温特沃斯理工学院、国立中山大学、泰国国立法政大学联合主办&#xff0c;JOIG期刊参与支持。会议旨在促进图像处理相关领域学术交流与合作&#xff0c;热忱欢迎从事相关技术研究的专…

【PyQt】17-日历控件

文章目录 前言一、代码二、运行结果总结 前言 固定格式的表述 日期的获取 一、代码 #Author &#xff1a;susocool #Creattime:2024/3/19 #FileName:40-日历控件 #Description: 日历控件的展示 import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQ…

麒麟 V10 一键安装 Oracle 11GR2(231017)单机版

Oracle 一键安装脚本&#xff0c;演示 麒麟 V10 一键安装 Oracle 11GR2 单机版过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载地址&#xff1a;Shell脚本安装Oracle数据库 脚本第…

代码随想录算法训练营第十一天| 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

题目&#xff1a;20. 有效的括号 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:20.有效的括号 题目链接&#xff1a;力扣题目链接 图释&#xff1a; class Solution { public:// 有效的括号 bool isValid(string s) {// 遇到左括号时就放入右括号&#xf…

【C语言】结构体类型名、变量名以及typedef

文章目录 分类判断结构体成员的使用typedef 分类判断 struct tag {char m;int i; }p;假设定义了上面这一个结构体&#xff0c;tag 就是类型名&#xff0c; p 就是变量名&#xff0c; m 和 i 就是结构体成员列表。 可以这么记&#xff0c;括号前面的是类型名&#xff0c;括号后…

尝试搭建谷粒商城 记录(四)

1、分布式组件 父工程引入依赖&#xff08;已完成&#xff09; spring boot 2.1.8.RELEASE spring cloud Greenwich.SR3 spring cloud alibaba 2.1.0.RELEASE 1. nacos用作服务注册中心 1、nacos下载安装 下载地址&#xff1a; https://github.com/alibaba/nacos/rel…

教务管理系统(java+mysql+jdbc+Druid+三层架构)

1、项目要求 1.1数据库表描述 设计一个教务管理系统&#xff0c;要求如下&#xff1a; 系统涉及的表有 account表&#xff08;账号表&#xff09; teacher表&#xff08;教师表&#xff09; student表&#xff08;学生表&#xff09; course表 (课程表) score表&#xff08;成…

【运维】MacOS Wifi热点设置

目录 打开热点 配置共享网段 打开热点 打开macOS设置&#xff0c;进入通用->共享 点击如下图标进行配置&#xff0c; 会进入如下界面&#xff08;⚠️目前是打开共享状态&#xff0c;无法修改配置&#xff0c;只有在未打开状态才能进入配置&#xff09; 配置完成后&#x…

STM32-DMA数据转运

DMA进行转运的条件 1&#xff1a;开关控制&#xff0c;DMA_CMD必须使能2&#xff1a;传输计数器必须大于03&#xff1a;触发源必须有触发的信号

短剧app系统开发:在短剧爆发期普通人如何实现收益?

今年春节&#xff0c;几部大热短剧抓住了流量密码&#xff0c;在市场中掀起了一股新的短剧热潮。在短剧火爆的诱惑下&#xff0c;吸引了越来越多的人进行到短剧市场中&#xff0c;市场规模迅速暴涨&#xff0c;已超五百多亿元&#xff01; 随着互联网的发展&#xff0c;各类影…

宝宝洗衣机买几公斤?四款实力扛鼎婴儿洗衣机推荐

对于有了宝宝的家庭来说&#xff0c;洗衣成为了一项重要的家务事。大家都知道&#xff0c;宝宝的皮肤比较娇嫩&#xff0c;容易受到各种细菌、病毒的侵扰。所以&#xff0c;宝宝的衣物应该与大人的分开单独清洗。婴儿洗衣机作为一种专门为婴幼儿家庭设计的洗衣机&#xff0c;其…