ACM寒假集训第三次专题任务

news/2025/2/7 23:26:08/文章来源:https://www.cnblogs.com/cytlllll/p/18703473

ACM寒假集训第三次专题任务

一、Priority Queue

题目:

联想截图_20250207141553

解题思路:

对优先队列的直接运用,直接翻译题目即可。

AC代码:

#include<iostream>
#include<string>
#include<queue>
using namespace std;
int main()
{int k;string operation;priority_queue<int> S;while(1){cin>>operation;if(operation=="insert"){cin>>k;S.push(k);}else if(operation=="extract"){if(!S.empty()){cout<<S.top()<<endl;S.pop();}}else if(operation=="end"){break;}}return 0;
}

二、ST 表 && RMQ 问题

题目:

联想截图_20250207142105联想截图_20250207142125

解题思路:

先构建ST表(以Sample 1为例):

1 2 3 4 5 6 7 8
i=0 9 3 1 7 5 6 0 8
i=1 9 3 7 7 6 6 8
i=2 9 7 7 7 8
i=3 9

再输入l和r,判断l到r整个区间的长度,取对数得到小于此长度的最大i(2的i次方,例如,9对应i为3,因为2的3次方为8,而8是小于9的。当i取4时则得到16大于9,不合题意)。

然后判断第一段、第二段起末位置并比较大小。

AC代码:

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
int N,M,l,r,a[31][100005],len;
int main()
{scanf("%d%d",&N,&M);for(int i=1;i<=N;i++){scanf("%d",&a[0][i]);}len=log2(N);for(int i=1;i<=len;i++){for(int j=1;j<=N-(1<<(i-1));j++){a[i][j]=max(a[i-1][j],a[i-1][j+(1<<(i-1))]);}}while(M--){scanf("%d%d",&l,&r);len=log2(r-l+1);printf("%d\n",max(a[len][l],a[len][r-(1<<len)+1]));}return 0;
}

三、合并果子

题目:

联想截图_20250207142257联想截图_20250207142325

解题思路:

论小根堆的运用,只要把每轮最小的两个加起来并都予去除,再push两者之和进堆即可。

AC代码:

#include<iostream>
#include<queue>
#include<functional>
#include<vector>
using namespace std;
int n,sum,t,k;
priority_queue<int,vector<int>,greater<int>> a;
int main()
{cin>>n;for(int i=0;i<n;i++){cin>>k;a.push(k);}while(a.size()!=1){t=0;t+=a.top();a.pop();t+=a.top();sum+=t;a.pop();a.push(t);}cout<<sum;
}

四、约瑟夫问题

题目:

联想截图_20250207142426

解题思路:

论队列的运用,把跳过的人从队首调到对尾,出圈的人则输出并从队伍中删除。

AC代码:

#include<iostream>
#include<queue>
using namespace std;
int n,m;
queue<int> a;
int main()
{cin>>n>>m;for(int i=1;i<=n;i++){a.push(i);}while(!a.empty()){for(int i=1;i<m;i++){int t=a.front();a.pop();a.push(t);}cout<<a.front()<<" ";a.pop();}return 0;
}

五、Look Up S

题目:

联想截图_20250207142514联想截图_20250207142543

解题思路:

单调栈的运用,相当于一次遍历找所有数的下一最近的大于此数的数的位置。

先把第一个数放进栈,第二个数若比它大,则其为第一个数对应所求;若比它小,则不是,并将第二个数也放进栈。如果第三个数大于第一个数,那么它既为第一个数对应答案也是第二个数对应答案,则将第一个数与第二个数从栈中消去(因为已经找到它们的答案了)。以以上思路进行循环即可得答案。

循环结束后仍在栈中的数则没有对应答案,输出0。

AC代码:

#include<iostream>
#include<vector>
#include<stack>
using namespace std;
struct cow{int h;int code;
};
int main()
{int n;cin>>n;vector<int> v(n+1),ans(n+1,0);stack<cow> s;for(int i=1;i<=n;i++){cin>>v[i];}for(int i=1;i<=n;i++){if(s.empty()||v[i]<=s.top().h){s.push(cow{v[i],i});}else{while(!s.empty()&&v[i]>s.top().h){ans[s.top().code]=i;s.pop();}s.push(cow{v[i],i});}}while(!s.empty()){ans[s.top().code]=0;s.pop();}for(int i=1;i<=n;i++){cout<<ans[i]<<endl;}return 0;
}

六、国旗计划

题目:

联想截图_20250207142626联想截图_20250207142641

解题思路:

环的问题,2倍链处理。结构体输入战士信息。假设对i战士进行分析,其右端点为r[i],那么下一个战士j要符合条件:

  1. l[j]≤r[i],保证能够覆盖要求

  2. r[j]尽量大,这是为了能够最优

用ST表进行处理

AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN = 2e5 + 5;
int n, m;
int ans[MAXN];
int f[MAXN*2][20];
struct node {int id;int l, r;
} s[MAXN*2];
bool cmp(node a, node b) {return a.l < b.l;
}
void pre() {for (int i = 1, p = i; i <= 2 * n; i++) {while (p <= 2 * n && s[p].l <= s[i].r) {p++;}f[i][0] = p - 1;}for(int i = 1; i < 20; i++) {for(int j = 1; j <= 2 * n; j++) {f[j][i] = f[f[j][i-1]][i-1];}}
}
void solve(int k) {int rr = s[k].l + m;int tot = 1;int p = k;for (int i = 19; i >= 0; i--) {if (f[k][i] != 0 && s[f[k][i]].r < rr) {tot += (1 << i);k = f[k][i];}}ans[s[p].id] = tot + 1;
}
int main(){scanf("%d %d", &n, &m);for (int i = 1; i <= n; i++) {scanf("%d %d", &s[i].l, &s[i].r);if (s[i].r < s[i].l) {s[i].r += m;}s[i].id = i;}sort(s + 1, s + 1 + n, cmp);for(int i = 1; i <= n; i++) {s[i + n] = s[i];s[i + n].l = s[i].l + m;s[i + n].r = s[i].r + m;}pre();for(int i = 1; i <= n; i++) {solve(i);}for(int i = 1; i <= n; i++) {printf("%d ", ans[i]);}return 0;
}

学习总结

学习了一些数据结构

stack

头文件#include <stack>

image-20250207225907538

定义:stack<int> s;

queue

头文件#include <queue>

image-20250207225956749image-20250207230012154

定义:queue<int> q;

priority_queue

头文件#include <queue>

image-20250207230103126

定义:priority_queue<int> q;默认为大根堆

定义小根堆:priority_queue<int, vector<int>,greater<int> > p;

ST表

详细使用见二、ST 表 && RMQ 问题。

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

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

相关文章

一款基于 WPF 开源、功能全面的串口调试工具

前言 今天大姚给大家分享一款基于 WPF 开源(MIT License)、免费、功能全面的串口调试工具:BYSerial。 项目介绍 BYSerial是一款基于 WPF 开源(MIT License)、免费、功能全面的串口调试工具,支持中英文双语切换,具有通用串口调试工具的一般功能,如串口通讯调试、TCP通讯…

NLog日志(二)

NLog //日志输出builder.Logging.ClearProviders();builder.Logging.AddNLog("nlog.config");配置后默认自动全部输出需求:自动记录的输出到控制台,手动记录的输出到日志文件1.配置两个日志记录器 一个控制台,一个日志文件<rules><!-- 默认日志记录器(…

探索数据编码:Delta Encoding

写在前面 在解决Doris访问AWS上存储的Parquet文件时,曾碰到过Doris不支持Delta Encoding导致数据读取失败。于是打算整理下跟Delta Encoding相关的知识,为解决连续的整型存储、Timestamp、Date类型存储时的压缩效率问题提供参考。 数据编码指的是从一种数据格式转换成另一种数…

0207深度学习:构建个性化 ImageNet 数据集的 LeNet 和 MobileNet 实践

2月7日,晚上,19:30~21:00(主讲老师:郑祥)实验内容: 【深度学习】训练常见的卷积神经网络模型 如LeNet和MobileNet,能制作个性化的ImageNet数据集,涉及到MMEdu、EasyTrain等工具。【2/6 19:00】二阶段直播接入和一阶段直播方式一样。接入方式请参考一阶段内容:【2/5…

注解反射之通过Class对象来操作对象的属性和方法

代码如下package com.loubin;import java.lang.annotation.*; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;public class Main {public static void main(S…

百度网盘的闲时下载卡入口

https://baijiahao.baidu.com/s?id=1820111080013395787&wfr=spider&for=pc 百度网盘的闲时下载卡入口首先,需要明确是,闲时下载卡的使用时间是01:00-09:00。闲时下载卡的使用时间是01:00-09:00其次,是电脑端的入口。1.在下载界面点击“立即提速”点击箭头指示…

2025年夸克网盘1TB免费空间领取教程,轻松扩容你的网盘

今天为大家带来的是2025年夸克网盘1TB免费空间领取教程,轻松扩容你的网盘。大家好呀!这里是专注为大家挖掘各种超值福利的小助手!你是不是也有过这样的烦恼——网盘存储空间不够用,电影、照片、文件放得满满的,完全没有余地?今天我要给大家带来一个超实用的福利,夸克网盘…

Duplicate Cleaner : 这款神器一键干掉重复文件

在如今这个数字时代,我们的电脑里存储着海量的文件。随着时间的推移,重复文件也越来越多,不仅占用宝贵的磁盘空间,还会让文件管理变得一团糟。 今天,就给大家介绍一款能轻松解决这一难题的神器 ——Duplicate Cleaner。Duplicate Cleaner 有普通版和功能更强大的 Pro 版。…

Doggo:一款友好的命令行DNS查询工具

一、基本概述 Doggo是由Karan Sharma使用Go语言开发的现代命令行DNS客户端工具,旨在以简洁、直观的方式输出DNS查询结果。它类似于传统的dig命令,但提供了更为现代化和易读的输出格式。 https://github.com/mr-karan/doggo二、主要特点 1、支持多种协议: Doggo不仅支持传统的…

uniapp 移动端(ios)uview2.0 u-input 插槽问题

这个插槽太奇怪了,非得加上对于的属性才能使用。<u-input class="u-input" prefixIcon="search" suffix-icon="search" placeholder="请输入验证码" type="text" border="surround"color="#fffffff0&quo…

DeepSeek-R1 技术全景解析:从原理到实践的“炼金术配方” ——附多阶段训练流程图与核心误区澄清

字数:约3200字|预计阅读时间:8分钟(调试着R1的API接口,看着控制台瀑布般流淌的思维链日志)此刻我仿佛看到AlphaGo的棋谱在代码世界重生——这是属于推理模型的AlphaZero时刻。 DeepSeek 发布的 V3、R1-Zero、R1 三大模型,代表了一条从通用基座到专用推理的完整技术路径。…

注解反射之获得Class对象

获得Class对象是实现反射的基础,获得Class对象主要有三种方式 下面是具体实例package com.loubin;import java.lang.annotation.*;public class Main {public static void main(String[] args) throws ClassNotFoundException {Class c = User.class;User user = new User();…