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

文章目录

  • 河南萌新联赛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;elsecout<<"NO"<<endl;	
}
signed main()
{IOSint 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;}elsebreak;}int i=u;cout<<w<<endl;while(w--){cout<<i<<" "<<q<<endl;i++;}}
}signed main()
{IOSint 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;elsecout<<"-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()
{IOSint 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()
{IOSint 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()
{IOSint 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;elseb[i]=1;}else{if(s[i]=='P')b[i]=1;elseb[i]=0;}}int k=0;int t;if(m%2==0)t=1;elset=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()
{IOSint 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;elsel=mid+1;}if(nn==1)break;cout<<l<<" ";add(l,-1);nn--;}
}
signed main()
{IOSint p;p=1;//cin>>p;while(p--)solve();return 0;
}

H题有时间再补吧。。。

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

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

相关文章

【时时三省】(C语言基础)指针进阶2

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 数组指针 是一种指针&#xff0d;是指向数组的指针 整型指针&#xff0d;是指向整形的指针 字符指针&#xff0d;是指向字符的指针 什么叫做数组指针 上面的整形指针跟字符指针只需要&am…

【鸿蒙学习】HarmonyOS应用开发者高级认证 - 一次开发,多端部署

一、学习目的 掌握鸿蒙的核心概念和端云一体化开发、数据、网络、媒体、并发、分布式、多设备协同等关键技术能力&#xff0c;具备独立设计和开发鸿蒙应用能力。 二、总体介绍 HarmonyOS 系统面向多终端提供了“一次开发&#xff0c;多端部署”&#xff08;后文中简称为“一…

日志审计-graylog ssh登录超过6次告警

Apt 设备通过UDP收集日志&#xff0c;在gray创建接收端口192.168.0.187:1514 1、ssh登录失败次数大于5次 ssh日志级别默认为INFO级别&#xff0c;通过系统rsyslog模块处理&#xff0c;日志默认存储在/var/log/auth.log。 将日志转发到graylog vim /etc/rsyslog.conf 文件末…

深入探讨SD NAND的SD模式与SPI模式初始化

在嵌入式系统和存储解决方案中&#xff0c;SD NAND的广泛应用是显而易见的。CS创世推出的SD NAND支持SD模式和SPI模式&#xff0c;这两种模式在功能和实现上各有优劣。在本文中&#xff0c;我们将深入探讨这两种模式的初始化过程&#xff0c;并比较它们在不同应用场景下的优劣&…

MySQL 配置免密码登陆(mysql_config_editor Configuration)

当使用mysql, mysqldump, mysqladmin等客户端连接MySQL数据库服务器时&#xff0c;需要提供用户凭证信息。你可以在每次连接时都输入连接信息&#xff08;用户名/密码/地址/端口等&#xff09;或者将用户信息保存在my.cnf配置文件的[client]模块。 第一种方式每次都输入用户密…

深度学习 --- VGG16各层feature map可视化(JupyterNotebook实战)

VGG16模块的可视化 VGG16简介&#xff1a; VGG是继AlexNet之后的后起之秀&#xff0c;相对于AlexNet他有如下特点&#xff1a; 1&#xff0c;更深的层数&#xff01;相对于仅有8层的AlexNet而言&#xff0c;VGG把层数增加到了16和19层。 2&#xff0c;更小的卷积核&#xff01;…

数据库MySQL多表设计、查询

目录 1.概述 2.一对多 3.一对一 4.多对多 5.多表查询 5.1内连接 5.2外连接 5.3子查询 1.概述 项目开发中,在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个…

网络编程TCP与UDP

TCP与UDP UDP头&#xff1a; 包括源端口、目的地端口、用户数据包长度&#xff0c;检验和 数据。 typedef struct _UDP_HEADER {unsigned short m_usSourPort;    // 源端口号16bitunsigned short m_usDestPort;    // 目的端口号16bitunsigned short m_usLen…

Docker!!!

⼀、Docker 1、Docker介绍.pdf 1、Docker 是什么&#xff1f; Docker 是⼀个开源的应⽤容器引擎&#xff0c;可以实现虚拟化&#xff0c;完全采⽤“沙盒”机制&#xff0c;容器之间不会存在任何接⼝。Docker 通过 Linux Container&#xff08;容器&#xff09;技术将任意类型…

Ubuntu 安装 mysql 与 远程连接配置

1、安装 mysql ubuntu 默认安装 8.0 版本&#xff1a; sudo apt install mysql-server安装过程中 提示 是否继续操作 y 即可 2、使用ubuntu 系统用户 root 直接进入 mysql 切换至 系统用户 su root 输入命令 可直接进入 mysql: mysql3、创建一个允许远程登录的用户 创建 …

《Python编程:从入门到实践》笔记(一)

一、字符串 1.修改字符串大小写 title()以首字母大写的方式显示每个单词&#xff0c;即将每个单词的首字母都改为大写&#xff0c;其他的改为小写。 upper()将字母都改为大写&#xff0c;lower()将字母都改为小写。 2.合并(拼接)字符串 Python使用加号()来合并字符串。这种合…

超容易出成果的方向:多模态医学图像处理!

哈喽朋友们&#xff0c;今天给大家推荐一个比较容易出成果的方向&#xff1a;多模态医学图像处理。 众所周知&#xff0c;多模态如今火的一塌糊涂&#xff0c;早就成了很多应用科学与AI结合的重要赛道&#xff0c;特别是在医学图像处理领域。 由此提出的多模态医学图像处理融合…

「Java 项目详解」API 文档搜索引擎(万字长文)

目录 运行效果 一、项目介绍 一&#xff09;需求介绍 二&#xff09;功能介绍 三&#xff09;实现思路 四&#xff09;项目目标 二、前期准备 一&#xff09;了解正排索引 二&#xff09;了解倒排索引 三&#xff09;获取 Java API 开发文档 四&#xff09;了解分词…

二叉树检验:算法详解

问题描述 /** 检查二叉树是否为有效的二叉搜索树有效的二叉搜索树满足左子树的节点值都小于根节点值&#xff0c;右子树的节点值都大于根节点值并且左右子树也必须是有效的二叉搜索树param root 二叉树的根节点return 如果二叉树是有效的二叉搜索树&#xff0c;则返回true&…

火绒使用详解 为什么选择火绒?使用了自定义规则及其高级功能的火绒,为什么能吊打卡巴斯基,360,瑞星,惠普联想戴尔的电脑管家等?

目录 前言 必看 为什么选择火绒&#xff1f; 使用了自定义规则及其高级功能的火绒&#xff0c;为什么能吊打卡巴斯基&#xff0c;360&#xff0c;瑞星&#xff0c;惠普联想戴尔的电脑管家等&#xff1f; 原因如下&#xff1a; 火绒的主要优势 1. 轻量化设计 2. 强大的自…

Prism-学习笔记1-安装Prism

安装Prism 在VS2022中安装如下图&#xff1a; 2. 搜索Prism&#xff0c;安装Prism&#xff1a;&#xff08;ps&#xff1a;如果安装很慢&#xff0c;直接往上搜关键字 Prism template Pack 下载&#xff0c;或者这里我下载好的Prism包&#xff0c;提取码&#xff1a;bi7c&…

D. Water Tree

模板题 #include<iostream> #include<vector> using namespace std; const int N5e59; int n; //树剖 //1.转成线性部分 vector<int> e[N]; void add(int u,int v){e[u].push_back(v);e[v].push_back(u); } int fa[N],dep[N],sz[N],wc[N]; void dfs1(int u,…

了解芯片的四大主流架构

四大主流芯片架构&#xff0c;犹如科技领域的四大支柱&#xff0c;各自矗立于技术创新的巅峰。这四大架构——X86、ARM、RISC-V与MIPS&#xff0c;不仅是芯片设计的基石&#xff0c;更是推动信息技术进步的强大动力。 一、芯片架构是什么&#xff1f; 芯片架构是指对芯片的类…

记录一次SQL 查询 LEFT JOIN 相关优化

记录一次 LEFT JOIN 相关优化 1 环境说明2 sql 在dm库查询用时30秒2.1 sql 语句2.2 sql 执行计划 3 调优数据库参数3.1 使用hint 调整数据库参数3.2 hint 的执行计划 4 永久修改数据库参数5 参数说明6 达梦数据库学习使用列表 1 环境说明 某项目的公文办公系统在生产环境刚部署…

如何使用Pytest进行自动化测试

为什么需要自动化测试 自动化测试有很多优点&#xff0c;但这里有3个主要的点 可重用性:不需要总是编写新的脚本&#xff0c;除非必要&#xff0c;即使是新的操作系统版本也不需要编写脚本。 可靠性:人容易出错&#xff0c;机器不太可能。当运行不能跳过的重复步骤/测试时&…