河南萌新联赛2024第(六)场:郑州大学(补题ABCDFGIL)

news2025/1/12 21:01:52

文章目录

  • 河南萌新联赛2024第(六)场:郑州大学
  • A 装备二选一(一)
    • 简单介绍:
    • 思路:
    • 代码:
  • B 百变吗喽
    • 简单介绍:
    • 思路:
    • 代码:
  • C 16进制世界
    • 简单介绍:
    • 思路:
    • 代码:
  • D 四散而逃
    • 简单介绍:
    • 思路:
    • 代码:
  • F 追寻光的方向
    • 简单介绍:
    • 思路:
    • 代码
  • G 等公交车
    • 简单介绍:
    • 思路:
    • 代码:
  • I 正义从不打背身:
    • 简单介绍:
    • 思路:
    • 代码:
  • L koala的程序
    • 简单介绍:
    • 思路:
    • 代码:

河南萌新联赛2024第(六)场:郑州大学

比赛链接

A 装备二选一(一)

简单介绍:

66E61d他拥有一个可以为他增加a%的暴击率,发生暴击时会使他本次普通攻击伤害变为原来的b倍

现在存在另一个武器,可以为他增加a%的暴击率,发生暴击时会使他本次普通攻击伤害变为原来的b倍,询问是否能替换获得更高输出能力

这个题卡了我好久,都不准备写了,后来带个数考虑到了占比问题

思路:

我们将最开始的能力当作100,然后分为两部分,暴击的乘以其倍数,不暴击的不变,结果求和,比较两个武器哪个更好

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define fir(i,a,b) for(int i=a;i<=b;i++)
#define PII pair<int,int> 
#define fi first
#define se second
#define tup tuple<int,int,int>
//int a[110],b[110];
void solve()
{
	int a,b,c,d;
	cin>>a>>b>>c>>d;
	if(a*b+(100-a)<c*d+(100-c))
	cout<<"YES"<<endl;
	else
	cout<<"NO"<<endl;	
}
signed main()
{
    IOS
    int t;
    t=1;
    //cin>>t;
    while(t--)
    solve();
    return 0;
}

B 百变吗喽

简单介绍:

给出两个字符串s,t,确保给出的字符串len(s)=len(t)-1,我们可以进行一次操作:在任意位置插入任意小写字母,求出有多少种操作方案

思路:

  1. 用两个数组存储s,t中各个字母出现的次数,比较s,t ,将其字符不同的位置用r记录
  2. 比较两个数组记录的字母数量,如果不同则用c累加差值,用q记录该字符
  3. 如果想要根据插入即可让字符串相等,那么两个数组应只有一个字母数量不同,即c值为1,因此如果c不等于1,输出0即可
  4. 如果首次出现不同的位置在1,则**只有1种解法,**输出位置0与字符q即可
  5. 如果不在1,则判断该位置紧挨着是否出现重复该字符及次数w,因为如果重复则可以插在不同位置,有不同的方案,靠前第一个与该字符不同的位置开始插入,有w种方案

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int a[1000010],b[1000010];

void solve()
{
	int ty=0;
	string s,t;
	cin>>s>>t;
	for(int i=0;i<s.size();i++)
	{
		a[s[i]-'a']++;
	}
	for(int i=0;i<t.size();i++)
	{
		b[t[i]-'a']++;
	}
	int r=-1;
	for(int i=0;i<t.size();i++)
	{
		if(s[i]!=t[i])
		{
			r=i;
			break;
		}
	}
	if(r==0)
	ty=1;
	if(r==-1)
	r=t.size()-1;
//	cout<<r<<endl;
	char q;
	int c=0;
	for(int i=0;i<26;i++)
	{
		if(a[i]!=b[i])
		{
			q=i+'a';
			c+=abs(a[i]-b[i]);
		}
		
	}
	//cout<<q<<endl;
	if(c!=1)
	cout<<"0"<<endl;
	else if(ty==1)
	{
		cout<<"1"<<endl;
		cout<<"0 "<<q<<endl;
	}
	else
	{
		int w=1,u=r;
		for(int i=r-1;i>=0;i--)
		{
			if(t[i]==t[r])
			{
				w++;
				u=i;
			}
			else
			break;
		}
		int i=u;
		cout<<w<<endl;
		while(w--)
		{
			cout<<i<<" "<<q<<endl;
			i++;
		}
	}
}

signed main()
{
    IOS
    int t;
    t=1;
   // cin>>t; 
    while(t--)
    solve();
    return 0;
}

C 16进制世界

简单介绍:

这是一个类似于01背包的问题,不过多了一个限制条件幸福度,幸福度必须为16的倍数

思路:

直接按照类似于01背包处理,需要16的倍数这一限制条件,我们可以对16取模增加一维幸福度的判断,关于背包问题可以参考博客

代码:

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define int long long
using namespace std;
const int N = 1e5 + 10;
int dp[N][20];
void solve() 
{
   int n,m;
   cin>>n>>m;
   memset(dp,-0x3f,sizeof(dp));
   dp[0][0]=0;
   for(int i=1;i<=n;i++)
   {
   		int v,w;
   		cin>>v>>w;
   		w%=16;
   		for(int i=m;i>=v;i--)
   		{
   			for(int j=0;j<16;j++)
   			{
   				dp[i][j]=max(dp[i-v][(j+w)%16]+1,dp[i][j]);
			}
		}
   }
   int ans=INT_MIN;
   for(int i=0;i<=m;i++)
   {
   		ans=max(ans,dp[i][0]);
   }
   cout<<ans<<endl;
   return;
}

signed main()
{
    IOS;
    int t = 1;
    while (t--) 
	solve();
    return 0;
}

D 四散而逃

简单介绍:

n个格子排成一排,每个格子有a[i]个人,每次奔逃选择三个下标,i,j, k使得1<=i<j<k<=n,并且a[j]>=2,从j号格子中选择两人分别逃到i号和k号格子

求出最少需要多少次奔逃才能够让所有人都到达1号格子或者n号格子。若无论多少次操作都做不到,就输出-1

思路:

  1. 如果n为3时,我们可以发现中间的数为奇数时,最后会剩下一个1无法处理,因此输出-1,如果为偶数,则除以2即为结果
  2. 如果2至(n-1),这些方格都为1人,我们无从下手,因此也输出-1
  3. 当其他情况时,我们可以在选择大于等于2人奔逃时,让人跑向奇数方格中,这样就可以使其变为偶数
  4. 由于每个奇数都要尽力变为偶数,因此如果该方格人数x为偶数时,需要奔逃次数为x/2,为奇数时,需要奔逃次数为(x+1)/2,最终将n个格子需要奔逃次数相加输出即可

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define fir(i,a,b) for(int i=a;i<=b;i++)
#define PII pair<int,int> 
#define fi first
#define se second
#define tup tuple<int,int,int>
int a[1000010];
map<int,int>p;
void solve()
{
	int n;
	cin>>n;
	int q=0;
	int sum=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(i>1&&i<n)
		{
			if(a[i]>1)
			q=1;
		}
	}
	//cout<<q<<endl;
	if(n==3)
	{
		if(a[2]%2==0)
		cout<<a[2]/2<<endl;
		else
		cout<<"-1"<<endl;
	}
	else if(q==0)
	cout<<"-1"<<endl;
	else
	{
		for(int i=2;i<n;i++)
		{
			sum+=(a[i]+1)/2;
		}
		cout<<sum<<endl;
	}
}
signed main()
{
    IOS
    int t;
    t=1;
    //cin>>t;
    while(t--)
    solve();
    return 0;
}

F 追寻光的方向

简单介绍:

小G所在道路有n个路灯,每个路灯发出的光亮为l[i],小G每次全力以赴跑到最亮的路灯下休息,然后继续跑到下一个最亮的路灯下,求出小G如果想到达第n个路灯下,需要休息几次?

思路:

  1. map容器将路灯的亮度与位置对应存入
  2. 将路灯亮度排序,倒着遍历其位置,如果该路灯的位置在比他亮的路灯之前则无需处理,如果在之后则需要将休息次数加一
  3. 由于最后一段到n的路程无需休息,所以输出时应该将休息次数减一输出

这个题我多想了,我刚开始想如果有两个相等的数,下标是不是需要一个二维数组或者容器来储存呢?

后来我发现,同一个数字的话,我们只记录最后的那个下标就可以啦,多想咯

代码

#include<bits/stdc++.h>
using namespace std;
//#define int long long
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define fir(i,a,b) for(int i=a;i<=b;i++)
#define PII pair<int,int> 
#define fi first
#define se second
#define tup tuple<int,int,int>
int a[1000010];
map<int,int>p;
void solve()
{
	int n;
	cin>>n;
	//int ma=INT_MIN;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		p[a[i]]=i;
	}
	sort(a+1,a+n+1);
	int r=-1;
	int w=0;
	for(int i=n;i>0;i--)
	{
		if(p[a[i]]>r)
		{
			w++;
			r=p[a[i]];
		}
		
	}
	cout<<w-1<<endl;
}
int main()
{
    IOS
    int t;
    t=1;
    //cin>>t;
    while(t--)
    solve();
    return 0;
}

G 等公交车

简单介绍:

给出各个站点到发车点的距离和公交车的发车时刻,接下来求出在时刻t时来到了x号站点的乘客的最少等待时间,如果无法乘上车,则输出”TNT“

思路:

  1. 如果该乘客到达的时间点比最晚发车到达其站台的车还要迟,则无法乘车
  2. 我们在乘客所在站点的距离,依次加发车时刻,为不同车到达该站点的时间(因为公交车1米/分钟),直到出现第一个大于乘客下车的时刻,用这个时刻减去乘客下车时刻即为所需等待的最短时间

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define fir(i,a,b) for(int i=a;i<=b;i++)
#define PII pair<int,int> 
#define fi first
#define se second
#define tup tuple<int,int,int>
int a[100010],b[100010];
void solve()
{
	memset(b,0,sizeof(b));
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<=m;i++)
	{
		cin>>b[i];
	}
	int q;
	cin>>q;
	int x,y;
	for(int i=1;i<=q;i++)
	{
		cin>>x>>y;
		if(x>a[y]+b[m])
		cout<<"TNT"<<endl;
		else
		{
			int ty;
			for(int i=1;i<=m;i++)
			{
				if(a[y]+b[i]>=x)
				{
					ty=a[y]+b[i];
					break;
				}
			}
			cout<<ty-x<<endl;
		}
	} 
}
signed main()
{
    IOS
    int t;
    t=1;
    //cin>>t;
    while(t--)
    solve();
    return 0;
}

I 正义从不打背身:

简单介绍:

小x面前有n个敌人,他只能击败正对自己的敌人,每次操作为将1.2.3…n位置变换为n.n-1…3.2.1,然后将敌人旋转180度,请求出m次操作后,敌人是否全被击败

思路:

请添加图片描述

  1. 我们通过具体操作发现其位置出现是有规律的,m次操作即为m,m-2,…依次减2,然后正着将未输出的全部输出即为所求顺序
  2. 翻转奇数次则变换,偶数次则不变,次数为m-i+1,然后根据是否正面朝向判断是否被击败

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define fir(i,a,b) for(int i=a;i<=b;i++)
#define PII pair<int,int> 
#define fi first
#define se second
#define tup tuple<int,int,int>
int a[2000010],b[2000010];
void solve()
{
	int n,m;
	cin>>n>>m;
	string s;
	cin>>s;
	s=" "+s; 
	for(int i=1;i<=m;i++)
	{
		if((m-i+1)%2!=0)
		{
			if(s[i]=='P')
			b[i]=0;
			else
			b[i]=1;
		}
		else
		{
			if(s[i]=='P')
			b[i]=1;
			else
			b[i]=0;
		}
	}
	int k=0;
	int t;
	if(m%2==0)
	t=1;
	else
	t=2;
	for(int i=m;i>=1;i-=2)
	{
		a[++k]=b[i];
	}
	for(int i=t;i<=m;i+=2)
	{
		a[++k]=b[i];
	}
	if(n>m)
	{
		for(int i=m+1;i<=n;i++)
		{
			a[++k]=(s[i]=='P');
		}
	}
	for(int i=1;i<=n;i++)
	{
		cout<<a[i]<<" ";
	}
	cout<<endl;
	return;
}
signed main()
{
    IOS
    int p;
    p=1;
    //cin>>t;
    while(p--)
    solve();
    return 0;
}

L koala的程序

简单介绍:

这是一个约瑟夫环问题,n个人,从第一个人开始,从1报数,报到m的人出局,下个人接着从1报数,n个人报完再从第一个人轮换,直到最后剩一个人为止,给出n-1个人的出局顺序

思路:

  1. 我们可以用树状数组+二分来解决这个问题,我们将人数用树状数组的存储方式存入数组,我们想查找前面有多少人时可以引用函数sum来求解
  2. 我们用二分可以找到出局的人
  3. 当出局一个人时,我们用add(l,-1),即可达到更新维护前缀和的目的
  4. 每次出局后,记得更新剩余人数

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define fir(i,a,b) for(int i=a;i<=b;i++)
#define PII pair<int,int> 
#define fi first
#define se second
#define tup tuple<int,int,int>
int tr[2000010]; 
int n,m;
int lowbit(int x)
{
	return x&(-x);
}

void add(int a,int b)
{
	for(int i=a;i<=n;i+=lowbit(i))
	{
		tr[i]+=b;
	}	
}

int sum(int c)
{
	int res=0;
	for(int i=c;i>0;i-=lowbit(i))
	{
		res+=tr[i];
	}
	return res;
}

void solve()
{
	//int n,m;
	cin>>n>>m;	
	for(int i=1;i<=n;i++)
	{
		add(i,1);
	}
	int now=1;
	int nn=n; 
	while(nn)
	{
		now=(now+m-1-1)%nn+1;
		int l=1;
		int r=n;
		while(l<r)
		{
			int mid=l+r>>1;
			if(sum(mid)>=now)
			r=mid;
			else
			l=mid+1;
		}
		if(nn==1)break;
		cout<<l<<" ";
		add(l,-1);
		nn--;
	}
}
signed main()
{
    IOS
    int p;
    p=1;
    //cin>>p;
    while(p--)
    solve();
    return 0;
}

H题有时间再补吧。。。

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

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

相关文章

第二十七节、人物可互动标识

一、多个场景同时存在 方法&#xff1a;将另一个场景拖拽进 当前场景中 这样在一个场景中保存物体&#xff0c;另一个场景切换即可 创建一个场景名为上图&#xff08;这是一个持久化的场景&#xff09; 被激活的场景是粗体字的 二、代码 使用第二个代码获得player的子物体 …

uniapp在线下载安装包更新app以及热更新

首先用getSystemInfo判断平台、 再通过json文件模拟接口 判断版本号是否一致 不一致则下载服务器apk进行更新 外加网络波动导致失败重新下载更新包 uni.getSystemInfo({success: function (e) {// #ifndef H5// 获取手机系统版本const system e.system.toLowerCase();const pl…

《黑神话:悟空》解锁+35项修改器,开启上帝模式!

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 8 月 20 日&#xff0c;国产 3A 大作《黑神话&#xff1a;悟空》闪亮登场&#xff01;这是一款由中国游戏开发商游戏科学开发的动作角色扮演游戏&#xff0c;此前在研发阶段就备受关注…

Python 使用 matplotlib 显示图像

如果没有安装 matplotlib 需要先安装&#xff1a; pip install matplotlib一、读取图片并显示 import matplotlib.pyplot as pltimage_path "/Users/AlanWang4523/Desktop/Debug/files/image.png" image_array plt.imread(image_path)plt.figure("ImageShow…

会声会影作为视屏制作软件如何?会声会影最新免费版

二、核心功能与特点 拖放式编辑&#xff1a;会声会影2024提供了拖放式标题、转场、覆叠和滤镜功能&#xff0c;使得视频编辑变得更加直观和高效。 色彩分级与动态分屏&#xff1a;软件支持色彩分级功能&#xff0c;可以对视频进行精细的色彩调整。同时&#xff0c;动态分屏功能…

STM32通用定时器,端口复用和重映射

STM32定时器是一种内置在STM32微控制器中的硬件模块&#xff0c;用于测量和控制时间。它具有高精度、可配置性和灵活性的特点&#xff0c;能够支持多种不同的工作模式和应用场景。以下是对STM32定时器的详细讲解&#xff1a; 一、定时器的基本构成 STM32定时器主要由以下几个…

内存管理————基础理解

目录 我们先看以下代码和内存分布图 对一些名词的解释说明&#xff1a; 题目 答案 问题解释&#xff1a; C语言中动态内存管理方式 C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 这里提一下要注意的点 C内存管理方式 基本内容 new/delete操作内置…

常用API:object

文章目录 Object类toString()方法equals()方法总结其他方法 黑马学习笔记 Object类 是所有类的父类&#xff0c;所有的类都默认继承Object类。Java中所有的类的对象都可以直接使用Object类提供的一些方法。 toString()方法 equals()方法 默认是判断两个对象的地址 也是判断…

MATLAB-疲劳检测

首先&#xff0c;我们需要解决一个问题&#xff0c;什么样可以视为疲劳&#xff1f; 频繁的眨眼/眨一次眼所用时间很长 不停的打哈欠 不停的点头 通过分析&#xff0c;我们得到了检测疲劳的三个标准&#xff1a;眨眼&#xff0c;打哈欠&#xff0c;头部姿态。 这三个标准可以…

OpenCV findTours函数及其用法

OpenCV findTours函数主要用以寻找图像中物体的轮廓&#xff0c;其原型如下&#xff1a; indTours 函数参数&#xff1a; Image 输入图像&#xff0c;需8位单通道图像。非零像素被视为1。零像素保持为0&#xff0c;因 此图 像被视为 二进制。您可以使用co…

【数据分享】《全国能源-分行业煤油消费总量》(2000-2020年)

而今天要限时免费分享的数据就是2000-2020年间出版的《全国能源-分行业煤油消费总量》并以多格式提供免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 在过去的二十年里&#xff0c;中国作为全球能源消费的重要力量&#xff0c;其能源结构的变化不仅影…

基于x86 平台opencv的图像采集和seetaface6的图像质量评估功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.2 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的图像质量评估功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的图像质量评估模块…

21.1 基于Netty实现聊天

21.1 基于Netty实现聊天 一. 章节概述二. `Netty`介绍三. 阻塞与非阻塞1. 阻塞与非阻塞简介2. BIO同步阻塞3. NIO同步非阻塞4. AIO异步非阻塞IO5. 异步阻塞IO(用的极少)6. 总结四. Netty三种线程模型1. 单线程模型2. 多线程模型3. 主从线程模型五. 构建Netty服务器************…

DDL——三范式与表约束

目录 一、三大范式 1.范式的定义 2.第一范式 3.第二范式 4.第三范式 二、表约束 1.约束的定义 2.非空约束&#xff08;not null&#xff09; 3.唯一性约束&#xff08;unique&#xff09; 4.主键约束&#xff08;primary key&#xff09; 5.外键约束&#xff08;fo…

可集成多模型的机器人开发框架 dora:让机器人编程走向大众

作者 | Annie Xu 责编 | 何苗 出品 | GOSIM 开源创新汇 C 和 C是机器人编程中常用的编程语言&#xff0c;但学起来存在一定难度。那些对机器人感兴趣&#xff0c;但没有精力花费数周时间学习 C 和 C编程的用户只能望而却步。 为了让机器人技术变得更简单&#xff0c;陶海轩&a…

AWS SAM CLI 备忘单!

安装 AWS SAM CLI brew tap aws/tap brew 安装 aws-sam-cli 验证安装 $ sam --version 升级 SAM $ brew upgrade aws-sam-cli 您需要 AWS 凭证才能在 AWS 上工作。 构建并部署简单应用程序 $ sam init→ 下载示例应用程序 $ sam build→ 构建您的应用程序 $ sam deploy --guid…

机器学习:决策树回归树实现

1、决策树&#xff1a; 是一种树形结构&#xff0c;用于通过一系列的是非问题来预测目标值。在决策树回归中&#xff0c;树的叶子节点代表预测的连续值。 2、数据准备&#xff1a; 收集数据集&#xff0c;并对其进行清洗和预处理。 将数据集分为特征&#xff08;X&#xff09;…

git-20240822

目录 初始化仓库 Git init Git init project --bare 查看提交的记录 git log --prettyoneline 查看当前git远程库地址 git remote -v 查看详细提交记录 git log 撤出暂存区的文件 git reset HEAD file(.代表全部文件&#xff09; 提交数据到远程仓库 git config --global push.…

4.6算法之贪心_702:Crossing River

题目 702:Crossing River 总时间限制: 1000ms 内存限制: 65536kB 描述 A group of N people wishes to go across a river with only one boat, which can at most carry two persons. Therefore some sort of shuttle arrangement must be arranged in order to row the boat…

【TB作品】普中V2,数字时钟万年历显示,音乐闹钟,流水灯,Proteus仿真

文章目录 功能硬件原理图LCD1602独立按键LED灯ds1302蜂鸣器 引脚汇总按键功能code 功能 带闹钟和花样流水灯的LCD数显实时时钟设计&#xff08;运用DS1302时钟模块&#xff0c;LCD显示&#xff0c;带万年历&#xff0c;时间到响音乐显示花样流水灯&#xff09; 万年历显示 按…