2023年广东工业大学腾讯杯新生程序设计竞赛

news2024/11/24 4:33:58

E.不知道叫什么名字

题意:找一段连续的区间,使得区间和为0且区间长度最大,输出区间长度。
思路:考虑前缀和,然后使用map去记录每个前缀和第一次出现的位置,然后对数组进行扫描即可。原理:若 s [ i ] = x s[i]=x s[i]=x,则, m a p [ x ] = i map[x]=i map[x]=i,当后续出现 s [ j ] = x s[j]=x s[j]=x时, s [ j ] − s [ i ] = 0 s[j]-s[i]=0 s[j]s[i]=0,则合法的区间长度为 j − i j-i ji
将此题一般化为,找一段连续的区间,使得区间和为 k 且长度最大,输出区间长度,我们同样使用这个方法,去记录前缀和,然后对数组进行扫码即可,对于前缀和 s [ j ] s[j] s[j]而言,因为 s [ j ] − ( s [ j ] − k ) = k s[j]-(s[j]-k)=k s[j](s[j]k)=k,所以需要定位到 s [ j ] − k s[j]-k s[j]k第一次出现的位置即可。

#include <bits/stdc++.h>

using namespace std;
const int N = 2e5 + 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<ll, 3> p3;
int mod = 1e9+7;
// const int maxv = 4e6 + 5;
// #define endl "\n"



void solve()
{
	int n;
	cin>>n;
	vector<int> a(n+5),s(n+5);
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=n;i++){
		s[i]=s[i-1]+((a[i]==1)?1:-1);
	}
	map<int,int> mp;
    mp[0]=0;
	for(int i=1;i<=n;i++){
		if(!mp.count(s[i])) mp[s[i]]=i;
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		int x=s[i];
		ans=max(ans,i-mp[x]);
	}
	cout<<ans<<endl;


}

int main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	t=1;
// 	cin>>t;
	while(t--){
		solve();
	}
   	system("pause");
    return 0;
}

G.闪闪发光心动不已!

题意:找到包含kira…doki的最长子序列。
思路:运用前后缀的思想,对字符串正向扫描一遍,然后逆向扫描一遍,对于位置i而言,其最大长度为其前面的kira子序列+其后面doki的子序列。

#include <bits/stdc++.h>

using namespace std;
const int N = 2e5 + 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<ll, 3> ar;
int mod = 1e9+7;
// const int maxv = 4e6 + 5;
#define endl "\n"

void solve()
{
    int n;
    cin>>n;
    string s;
    cin>>s;
    s=" "+s;
    vector<int> pre(n+5),suf(n+5);
    int tot=0;
    for(int i=1;i<=n;i++){
        pre[i]=pre[i-1];
        if(tot==0&&s[i]=='k') tot++;
        else if(tot==1&&s[i]=='i') tot++;
        else if(tot==2&&s[i]=='r') tot++;
        else if(tot==3&&s[i]=='a') tot++;
        if(tot==4) pre[i]+=4,tot=0;
    }
//     for(int i=1;i<=n;i++) cout<<pre[i]<<" ";
    tot=0;
    for(int i=n;i>=1;i--){
        suf[i]=suf[i+1];
        if(tot==0&&s[i]=='i') tot++;
        else if(tot==1&&s[i]=='k') tot++;
        else if(tot==2&&s[i]=='o') tot++;
        else if(tot==3&&s[i]=='d') tot++;
        if(tot==4) suf[i]+=4,tot=0;
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        if(pre[i]&&suf[i+1]) ans=max(ans,pre[i]+suf[i+1]);
    }
    cout<<ans<<endl;
}

int main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	t=1;
// 	cin>>t;
	while(t--){
		solve();
	}
   	system("pause");
    return 0;
}

I.uu爱玩飞行棋

题意:距离终点m米,然后给定n个操作,每次可以走x步,若不能直接到达终点则需返回多余的步数,问走到终点的最小操作。
思路:考虑背包,设计状态 d p [ i ] [ j ] dp[i][j] dp[i][j],表示对于前 i i i个操作,还剩 j j j步的最小操作数量。

#include <bits/stdc++.h>

using namespace std;
const int N = 2e5 + 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<ll, 3> p3;
int mod = 1e9+7;
// const int maxv = 4e6 + 5;
// #define endl "\n"

int dp[2010][2010];

void solve()
{
	int n,m;
	cin>>n>>m;
	vector<int> a(m+5);
	for(int i=1;i<=m;i++){
		cin>>a[i];
	}
	memset(dp,0x3f,sizeof dp);
	dp[0][n]=0;
	for(int i=1;i<=m;i++){
		for(int j=0;j<=n+5;j++){
                dp[i][j]=min(dp[i-1][j],dp[i-1][j+a[i]]+1);//当前状态由j+a[i]转移而来
                if(j<a[i])dp[i][j]=min(dp[i-1][j],dp[i-1][a[i]-j]+1);//表示反弹的状态
            }
	}
	if(dp[m][0]>1e9/2) cout<<-1<<endl;
	else cout<<dp[m][0]<<endl;


}

int main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	t=1;
// 	cin>>t;
	while(t--){
		solve();
	}
   	system("pause");
    return 0;
}

J.火柴人小游戏

在这里插入图片描述
思路:很容易想到二分,需要思考如何进行check,我们同样容易发现,我们可以贪心去选择战斗力较小的且能到达的点,所以我们无论我们初始的战斗力如何,我们的战斗顺序都是固定的,显然,普通的队列并不能满足我们的贪心需求,我们使用优先队列去生成我们的路径即可,然后每次就可以在线性时间复杂度内check完成。

#include <bits/stdc++.h>

using namespace std;
const int N = 2e5 + 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<ll, 3> ar;
int mod = 1e9+7;
// const int maxv = 4e6 + 5;
// #define endl "\n"

int n,m,x,y;
ll a[1005][1005];

vector<ll> p;
int dx[]={0,0,-1,1};
int dy[]={-1,1,0,0};
int st[1005][1005];
void bfs()
{
	priority_queue<ar,vector<ar>,greater<ar> > q;
	int eg=a[x][y];
	q.push({eg,x,y});
	st[x][y]=1;
	//p.push_back(a[x][y]);
	while(!q.empty()){
		auto [z,nx,ny]=q.top();
        //cout<<z<<" "<<nx<<" "<<ny<<endl;
        p.push_back(z);
		q.pop();
		for(int i=0;i<4;i++){
			int zx=dx[i]+nx,zy=dy[i]+ny;
			if(zx<1||zx>n||zy<1||zy>m) continue;
			if(st[zx][zy]) continue;
			//p.push_back(z);
            st[zx][zy]=1;
			q.push({a[zx][zy],zx,zy});
		}
	}
}

bool check(ll x)
{
	ll now=x;
//     if(x<p[0]) return false;
	for(int i=1;i<p.size();i++){
		if(p[i]>now) return false;
		now+=p[i];
	}
	return true;
}

void solve()
{
	cin>>n>>m>>x>>y;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	bfs();
	ll l=a[x][y],r=1e18,ans=-1;
	while(l<=r){
		ll mid=(l+r)/2;
		if(check(mid)){
			r=mid-1;
			ans=mid;
		}
		else{
			l=mid+1;
		}
	}
//     for(auto x: p) cout<<x<<" ";
    
	if(ans==a[x][y]) cout<<"No cheating need."<<endl;
	else cout<<ans<<endl;


}

int main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	t=1;
// 	cin>>t;
	while(t--){
		solve();
	}
   	system("pause");
    return 0;
}

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

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

相关文章

低代码——“平衡饮食”才是王道

文章目录 一、低代码的概念二、低代码的优点2.1. 高效率与快速开发2.2. 降低技术门槛2.3. 适用于快速迭代与原型开发 三、低代码的缺点3.1. 定制性不足3.2. 深度不足3.3. 可能导致技术债务 四、低代码开发的未来4.1. 深度定制化4.2. 智能化 五、低代码会替代传统编程吗&#xf…

甘草书店:#9 2023年11月23日 星期四 「麦田创业历程分享1——联合创始人的魔幻相遇」

既然甘草是一家创业主题的书店咖啡馆&#xff0c;那就从我&#xff0c;从麦田开始分享一下创业历程吧。 需要声明的是&#xff0c;我从不认为我有资格对别人的创业指指点点&#xff0c;每位创业者的性格、背景、基础、诉求各有不同&#xff0c;时代发展也日新月异&#xff0c;…

Javaweb | Servlet编程

目录: 1.认识Servlet2.编写Servlet3.Servlet的运行机制4.Servlet的生命周期4.1 Servlet生命周期图init()方法doGet()doPost()service()destroy()方法 5.解决“控制台”打印中文乱码问题6.Servlet 和 JSP内置对象 (常用对象)获得out对象获得request 和 response对象获得session对…

数据结构 图的广度优先搜索和深度优先搜索

一、广度优先搜索 广度优先搜索等价于树的层次遍历&#xff0c;将起点的每一层进行遍历 当这一层结点全部被遍历完时&#xff0c;再遍历下一层次&#xff0c;从图中可以根据距离遍历起点的长度进行层次选择 例&#xff1a; 以a结点作为开始结点 a的下一层次有b c e三个结点 所以…

无敌是多么的寂寞!一本书讲透Java多线程!吊打多线程从原理到实践!

摘要 互联网的每一个角落&#xff0c;无论是大型电商平台的秒杀活动&#xff0c;社交平台的实时消息推送&#xff0c;还是在线视频平台的流量洪峰&#xff0c;背后都离不开多线程技术的支持。在数字化转型的过程中&#xff0c;高并发、高性能是衡量系统性能的核心指标&#xff…

C语言--不使用库函数,把一个数字转为字符串【详细解释】

一.题目描述 输入一个数字&#xff0c;把他转为字符串 比如&#xff1a;输入数字&#xff1a;12345 输出&#xff1a;12345&#xff08;这里的12345是字符串12345&#xff09; 二.思路分析 比如给定一个数字12345&#xff0c;先把它转为字符54321&#xff08;“54321”&#…

洛谷P1044 [NOIP2003 普及组] 栈 递归方法

目录 核心&#xff1a; 问题转化&#xff1a; 状态转化&#xff1a;&#xff08;你得先读懂题&#xff0c;理解我们要干什么&#xff09; 对应不同情况下的状态转化&#xff1a;&#xff08;比如栈空就不能出栈&#xff0c;&#xff0c;&#xff09; AC代码&#xff1a; 题…

MySQL实战45讲-第1-2讲-一条SQL查询语句是如何执行的? 一条SQL更新语句是如何执行的

大体来说&#xff0c;MySQL可以分为Server层和存储引擎层两部分 Server层&#xff1a;Server层包括连接器、查询缓存、分析器、优化器、执行器等。以及所有的内置函数&#xff08;如日期、时间、数学和加密函数等&#xff09;&#xff0c;所有跨存储引擎的功能都在这一层实现&a…

C语言课程设计

内容与设计思想 1、系统功能与分析&#xff08;填写你所设计的菜单及流程图&#xff09;。 菜单&#xff1a; 日历打印 日历推算 日历间隔倒计时牌 退出程序 模块设计 根据功能需要&#xff1a; 源文件&#xff1a; #include<stdio.h> #include&…

基于深度学习的遥感图像变化差异可视化系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 遥感图像变化差异可视化是遥感图像处理和分析的重要研究领域之一。随着遥感技术的快速发展和遥感数据的广泛应用&#xff0c;遥感图像的获取和处理变得越来越容易…

hive-3.1.2环境安装实验

1.修改hadoop相关参数 1-修改core-site.xml [bigdata@master hive]$ vim /opt/module/hadoop/etc/hadoop/core-site.xml <!-- 配置该bigdata(superUser)允许通过代理访问的主机节点 --><property><name>hadoop.proxyuser.bigdata.hosts</name><va…

FastAPI的请求体参数

FastAPI 请求体参数 所谓的请求体参数&#xff0c;就是不在url中的发送的数据&#xff0c;其实我们应该知道http协议是什么。 所谓的协议&#xff0c;就是一种格式的约定。举个生活中的简单的例子&#xff0c;你想买个早餐&#xff0c;你要问老板鸡蛋灌饼多少钱&#xff0c;老…

Python查看文件列表

os.listdir 是 Python 的一个内置函数&#xff0c;用于列出指定目录中的所有文件和子目录。它接受一个字符串参数&#xff0c;即要列出内容的目录的路径。 列出当前工作目录中的所有文件和子目录 files_and_dirs os.listdir() print(files_and_dirs) 列出指定目录中的所…

一则广告,一个故事,这就我选择学习计算机专业的两个原因

还记得当初自己为什么选择计算机&#xff1f; 现在回想起来&#xff0c;当初驱使自己选择学习计算机专业的原因&#xff0c;一共有两个&#xff1a; 一、一则长城电脑的广告。 上个世纪80年代&#xff0c;我还在读小学&#xff0c;当时在中央电视台上经常播放着的长城电脑的一则…

(NeRF学习)3D Gaussian Splatting Instant-NGP

学习参考&#xff1a; 3D Gaussian Splatting入门指南【五分钟学会渲染自己的NeRF模型&#xff0c;有手就行&#xff01;】 三维重建instant-ngp环境部署与colmap、ffmpeg的脚本参数使用 一、3D Gaussian Splatting &#xff08;一&#xff09;3D Gaussian Splatting环境配置…

(一)rtthread主线程启动流程

&#xff08;一&#xff09;rtthread主线程启动流程 声明1.启动分析2.源码分析 声明 本文主要为个人学习笔记内容总结&#xff0c;有来自网络及其他&#xff0c;如有雷同&#xff0c;请告知。 1.启动分析 基于&#xff1a;rt-thread-v5.0.1 先执行&#xff1a;汇编代码start…

一文3000字从0到1用Python进行gRPC接口测试!

gRPC 是一个高性能、通用的开源RPC框架&#xff0c;其由 Google 主要面向移动应用开发并基于HTTP/2 协议标准而设计&#xff0c;基于 ProtoBuf(Protocol Buffers) 序列化协议开发&#xff0c;且支持众多开发语言。 自gRPC推出以来&#xff0c;已经广泛应用于各种服务之中。在测…

2023新优化应用:RIME-CNN-LSTM-Attention超前24步多变量回归预测算法

程序平台&#xff1a;适用于MATLAB 2023版及以上版本。 霜冰优化算法是2023年发表于SCI、中科院二区Top期刊《Neurocomputing》上的新优化算法&#xff0c;现如今还未有RIME优化算法应用文献哦。RIME主要对霜冰的形成过程进行模拟&#xff0c;将其巧妙地应用于算法搜索领域。 …

创建第一个 Flink 项目

一、运行环境介绍 Flink执行环境主要分为本地环境和集群环境&#xff0c;本地环境主要为了方便用户编写和调试代码使用&#xff0c;而集群环境则被用于正式环境中&#xff0c;可以借助Hadoop Yarn、k8s或Mesos等不同的资源管理器部署自己的应用。 环境依赖&#xff1a; 【1】…

RTL编码(2)——模块优化

一、顶层模块的划分 在RTL编码中&#xff0c;我们是以模块为单位进行设计的&#xff0c;模块之间的连接和嵌套关系对于电路结构有着很大的影响。一个好的系统设计中&#xff0c;我们应该使得模块尽量满足以下两个标准&#xff1a; 顶层模块扁平化内部模块层次化 1.1 顶层模块扁…