HUT23级训练赛
目录
A - tmn学长的字符串1
B - 帮帮神君先生
C - z学长的猫
D - 这题用来防ak
E - 这题考察FFT卷积
F - 这题考察二进制
G - 这题考察高精度
H - 这题考察签到
I - 爱派克斯,启动!
J - tmn学长的字符串2
K - 秋奕来买瓜
A - tmn学长的字符串1
思路:字符串模拟。
对于第一类字符串,其组成一定是合法的数字,第二类字符串则是其他剩余的情况。
对于字符串的处理:我们开一个string去记录每段字符串,对于一段字符串的记录:因为会出现空串的情况,所以我们在记录字符串时,加入一个特殊符号,在最后输出的时候特判即可。
因为是字符串模拟,所以不涉及算法,具体思路看代码注释:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
typedef long long ll;
const int maxv = 4e6 + 5;
typedef pair<ll, ll> pll;bool check(string s)//判断是否为数字字符串
{for(int i=0;i<s.size();i++){if(s[0]=='0'&&s.size()!=1){return false;}if(s[i]<'0'||s[i]>'9') return false;}return true;
}void solve()
{string s;cin>>s;s+=";";vector<string> c1,c2;//使用vector去储存每个字符串string t;for(int i=0;i<s.size();i++){if(s[i]==','||s[i]==';'){//我们把题目给定的','和';'称为终止符,当我们遇见终止符时,就进行判断if(t.empty()) t.push_back('#');//如果当前用于储存的字符串t为空,那么我们就放入一个特殊字符,特殊字符只是用于应对空串的情况,其他情况不会出现特殊字符if(check(t)){//去检验目前字符串是否合法c1.push_back(t);//合法,即全为数字,那么存入1}else{c2.push_back(t);//否则存入2}t="";//将t清空}else t+=s[i];//如果当前不是终止符,直接将该字符加入t即可}if(c1.size()){//因为c1是储存的数字,所以不可能出现空串的情况cout<<"\"";for(int i=0;i<c1.size();i++){cout<<c1[i];if(i!=c1.size()-1) cout<<",";}cout<<"\"";}else{cout<<"-";}cout<<endl;if(c2.size()){//c2储存的其他情况的字符串,所以需要进行特判cout<<"\"";if(c2[0]!="#") cout<<c2[0];//特判特殊字符for(int i=1;i<c2.size();i++){cout<<",";if(c2[i]!="#") cout<<c2[i];}cout<<"\"";}else{cout<<"-";}cout<<endl;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;//cin >> t;while (t--){solve();}system("pause");return 0;
}
B - 帮帮神君先生
思路:考察最基本的二分算法。把题意抽象一下,就是对于每一个,求在a数组中有多少个比
小的数,因为a数组和b数组都是2e5的大小,所以我们对于每一个
,每次去遍历一遍a数组,会超时,因为这时候我们的时间复杂度相当于是2e5*2e5,而c一秒只能跑1e8左右,所以需要算法对其进行优化。运用二分算法即可成功解决此题
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
typedef long long ll;
const int maxv = 4e6 + 5;
typedef pair<ll, ll> pll;void solve()
{int n,m;cin>>n>>m;vector<int> a(n),b(m);for(int i=0;i<n;i++) cin>>a[i];for(int i=0;i<m;i++) cin>>b[i];sort(a.begin(),a.end());for(int i=0;i<m;i++){int t=upper_bound(a.begin(),a.end(),b[i])-a.begin()-1;if(t>=0){cout<<t+1<<" ";}else cout<<0<<" ";}cout<<endl;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;//cin >> t;while (t--){solve();}system("pause");return 0;
}
C - z学长的猫
思路:题目要我们先删除,但先排序后删除本质上是一样的,所以先将数组进行排序,由此,此题转化为了在有序数组中寻找最大的一段符合条件的的区间,即区间中后一个数减前一个的差不能超过k,因为题目要求剩余区间全部合法,所以我们只用求出最大合法区间,然后把其他的全部删去就好。
#include<bits/stdc++.h>using namespace std;
const int N=1e5+5;
typedef long long ll;
typedef pair<ll,ll> pll;void solve()
{ int n,k;cin>>n>>k;vector<int> a(n+5);for(int i=1;i<=n;i++) cin>>a[i];sort(a.begin()+1,a.begin()+1+n);int cnt=1;int res=0;for(int i=1;i<n;i++){int x=a[i+1]-a[i];if(x<=k){cnt++;}else{res=max(res,cnt);cnt=1;}}res=max(res,cnt);cout<<n-res<<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;
}
D - 这题用来防ak
思路:签到题,,判断最大的两个数相加是否大于等于10即可。
#include<bits/stdc++.h>using namespace std;
const int N=1e5+5;
typedef long long ll;
typedef pair<ll,ll> pll;void solve()
{ int a,b,c;cin>>a>>b>>c;vector<int> s;s.push_back(a),s.push_back(b),s.push_back(c);sort(s.begin(),s.end());if(s[2]+s[1]>=10) cout<<"YES"<<endl;else cout<<"NO"<<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;
}
E - 这题考察FFT卷积
思路:将题意抽象为:给定一个n,要求输出1-n范围内,只含有一个非0数字的个数。
我们从规律入手,我们可以发现1-9的范围内,有9个数(1-9本身),10-90的范围内有9个数 (10,20,30……90)以此类推,100到900之间也存在9个数,我们可以发现,9的个数,是和n的位数挂钩的,并且最高位为多少,就会多加几个数字。因此我们可以将n的位数求出来,并且求出n的最高位,就可以得到答案。
其实我们发现,如果是两位数的话,最后的数字为从9开始加,所以位数减一就为9的组数,比如3位数就有2组9,也就是18。此时刚好分解得到最高位,再加上最高位就可以了。
#include<iostream>
#include<algorithm>typedef long long ll;
const int N=1e5+5;
using namespace std;int main()
{ int t;scanf("%d",&t);while (t--){ int n;cin>>n;int cnt=0;if(n<=9){cout<<n<<endl;continue;}while(n>10){n/=10;cnt++;}cout<<n+cnt*9<<endl;} return 0;}
F - 这题考察二进制
思路:签到题,按题意模拟即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
typedef long long ll;
typedef pair<ll,int> pll;void solve()
{int n;cin>>n;vector<int> a(n);for(int i=0;i<n;i++) cin>>a[i];int cnt=0;for(int i=0;i<n;i++){int res=0;if(a[i]==0){for(int j=i;j<n;j++){if(a[j]==0){res++;}else break;}cnt=max(cnt,res);}}cout<<cnt<<endl;}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t=1;cin>>t;while(t--){solve();}system("pause");return 0;
}
G - 这题考察高精度
思路:签到,诈骗题,其实根本用不上高精度,我们求前n项和,然后减去所有2的幂次方的两倍即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
typedef long long ll ;
const int maxv=4e6+5;
typedef pair<ll,ll> pll;void solve()
{ll n;cin>>n;ll res=(n+1)*n/2;for(int i=0;;i++){ll x=1ll<<i;//求2的幂次方,使用其他方法也可以,比如循环或者直接调用pow函数if(x<=n) res-=x*2;else break;}cout<<res<<endl;}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t=1;cin>>t;while(t--){solve();}system("pause");return 0;
}
H - 这题考察签到
思路:二分答案,防ak题
#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
typedef long long ll;
const int maxv = 4e6 + 5;
typedef pair<ll, ll> pll;
typedef array<ll,3> p3;ll n,m,k,s;
vector<int> a(N),b(N);
vector<pll> am(N),bm(N);
vector<pll> w(N);bool check(int x)
{ll res=0;vector<ll> v;for(int i=0;i<m;i++){auto [t,c]=w[i];if(t==1){v.push_back(am[x].first*c);}else{v.push_back(bm[x].first*c);}}sort(v.begin(),v.end());for(int i=0;i<k;i++) res+=v[i];return res<=s;}void solve()
{cin>>n>>m>>k>>s;int c=2e9;int day=1;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]<c){c=a[i];day=i;}am[i]={c,day};}c=2e9,day=1;for(int i=1;i<=n;i++){cin>>b[i];if(b[i]<c){c=b[i];day=i;}bm[i]={c,day};}for(int i=0;i<m;i++){int t,c;cin>>t>>c;w[i]={t,c};}int l=1,r=n;int ans=-1;while(l<=r){int mid=(l+r)/2;if(check(mid)){ans=mid;r=mid-1;}else{l=mid+1;}}if(ans==-1){cout<<-1<<endl;return ;}cout<<ans<<endl;vector<p3> v;for(int i=0;i<m;i++){auto [t,c]=w[i];if(t==1){v.push_back({am[ans].first*c,am[ans].second,i+1});}else v.push_back({bm[ans].first*c,bm[ans].second,i+1});}sort(v.begin(),v.end(),[](p3 x,p3 y){if(x[0]==y[0]) return x[1]<y[1];return x[0]<y[0];});vector<pll> cur;int cnt=1;for(int i=0;i<k;i++){auto [x,y,id]=v[i];cur.push_back({id,y});cnt++;}for(auto [x,y]: cur) cout<<x<<" "<<y<<"\n";}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;//cin >> t;while (t--){solve();}system("pause");return 0;
}
I - 爱派克斯,启动!
思路:签到。
统计每组的和是否大于等于2即可。
#include<bits/stdc++.h>using namespace std;
const int N=1e5+5;
typedef long long ll;void solve()
{ int cnt=0;int n;cin>>n;for(int i=0;i<n;i++){int a,b,c;cin>>a>>b>>c;if(a+b+c>=2) cnt++;}cout<<cnt<<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 - tmn学长的字符串2
思路:字符串模拟。
将题意抽象一下:给定一个字符串,将指定区域的字符串循环移动k次。
因为k的范围位1e9,所以不可能去一次次的进行暴力移动, 我们可以发现,当一个子串的循环移动次数为该串的长度时,子串复原,所以我们只需要去对子串进行k%len(子串长度)次的移动即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
typedef long long ll ;
const int maxv=4e6+5;
typedef pair<ll,ll> pll;void solve()
{string s;cin>>s;int q;cin>>q;while(q--){int l,r,k;cin>>l>>r>>k;int len=r-l+1;k%=len;string a=s.substr(0,l-1);string b=s.substr(l-1,r-l+1);string c=s.substr(r);string x=b.substr(0,len-k);string y=b.substr(len-k);s=a+y+x+c;}cout<<s<<endl;}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}system("pause");return 0;
}
给出第二种题解:
模拟操作,把区间内的每个字母向右移动k位即可
假设区间为[1, 5],区间内字符串为12345
向右移动2位的话就是45123,
向右移动5位的话还是12345,相当于没变 ,
所以向右移动7位和向右移动2位的效果是一致的
所以每次操作时先把k模一下区间长度即可
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;typedef pair<int, int> PII;
typedef long long ll;const int N = 110;int main()
{IOSstring s;cin >> s;int Q;cin >> Q;while(Q --){int l, r, k;cin >> l >> r >> k;string tmp = s;for(int i = l; i <= r; i ++){//ne表示移动后在字符串中所处的下标, i - l 表示在所选区间内的第几位 int ne = l - 1 + (i - l + k) % (r - l + 1);//(r - l + 1)是区间长度,(i - l + k) % (r - l + 1)是移动后所处在区间中第几个位置(从0开始算) tmp[ne] = s[i - 1];}s = tmp;}cout << s << endl;return 0;
}
K - 秋奕来买瓜
思路:签到,判断奇偶即可,注意特判2的情况。
#include<iostream>
using namespace std;
typedef long long ll;int main()
{int n;cin>>n;if(n%2!=0||n==2){cout<<"NO"<<endl;}else{cout<<"YES"<<endl;}return 0;
}
相关文章:
HUT23级训练赛
目录 A - tmn学长的字符串1 B - 帮帮神君先生 C - z学长的猫 D - 这题用来防ak E - 这题考察FFT卷积 F - 这题考察二进制 G - 这题考察高精度 H - 这题考察签到 I - 爱派克斯,启动! J - tmn学长的字符串2 K - 秋奕来买瓜 A - tmn学长的字符串1 思路&#x…...
sm4 加解密算法工具类( Java 版 )
sm4 加解密算法工具类(java) 说明:密钥是 hexString import java.security.Key; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;import cn.hutool.core.codec.Base64Decoder; import…...

Redis项目实战——商户查询缓存
目录 为什么要用Redis实现商户查询缓存?用Redis实现商户查询缓存的基本思路?使用Redis缓存的问题及解决方法?一、如何保持数据库数据和Redis缓存数据的一致性?1 内存淘汰机制2 超时剔除机制3 主动更新机制(胜ÿ…...

重磅OpenAI发布ChatGPT企业版本
8月29日凌晨,Open AI官网发布ChatGPT企业版本! 企业版简介: ChatGPT企业版提供企业级安全和隐私、无限的高速 GPT-4 访问、用于处理更长输入的更长上下文窗口、高级数据分析功能、自定义选项等等。人工智能可以协助和提升我们工作生活的各个…...
# Go学习-Day7
文章目录 断言文件打开/关闭文件读取文件写入文件 命令行参数解析Argsflag包 JSON 个人博客:CSDN博客 断言 type Node struct {x inty int }func main() {var a interface{}var n Node Node{1, 2}a nvar b Nodeb a.(Node)fmt.Println(b) }此处我们有一个结构体…...

uniapp-form表单
<template><view class"ptb-20 plr-30 bg min100"><view class"bg-white radius-20 pd-30"><view class"bold mt-30 mb-50 size-32">选择方式:</view><u--form labelPosition"left" :mod…...
漏洞挖掘-利用
一、文章简介 整合一些web漏洞,以及对漏洞的理解。 二、Web漏洞 1.SQL注入 (1)定义 开发者程序编写过程中,对传入用户数据过滤不严格,将可能存在的攻击载荷拼接到SQL查询语句当中,再将这些查询语句传递到…...
React钩子函数之useDeferredValue的基本使用
在React中,使用钩子函数可以方便地管理组件的状态和副作用。useDeferredValue是React 18中新引入的钩子函数之一,它可以帮助我们优化渲染性能,让组件更加流畅。 useDeferredValue的作用是将一个值延迟更新。这个值可以是状态、属性或其他变量…...
lodash常用方法
cloneDeep 克隆 import { cloneDeep,reduce } from lodash; const b {c:1} const a cloneDeep(b)debounce 防抖 import { debounce } from lodash; debounce(() > {}, 300, { trailing: true })()omit方法删除指定属性,返回一个新的对象 import …...
QByteArray与结构体之间相互转换
Qt项目会碰到自定义结构体和字符数组之间的转换问题,不妨假设结构体名字为custom_struct, 字符数组名字为array_data QByteArray转换为自定义结构体 custom_struct *struct_data reinterpret_cast<custom_struct *>(array_data.data());自定义结构体转换为…...
npm如何安装淘宝镜像
通过命令配置 这种方法是通过修改npm的全局配置文件,将默认的镜像源改为淘宝镜像。具体步骤如下: 打开终端,输入以下命令,设置淘宝镜像源:(windowr) npm config set registry https://registr…...

从项目中突显技能:在面试中讲述你的编程故事
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...

python的观察者模式案例
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言二、具体代码写在结尾 前言 最近写安卓的代码比较多,了解了java代码的注册回调机制,也就是观察者模式,搜索了一下python也有…...

C语言——类型转换
数据有不同的类型,不同类型数据之间进行混合运算时涉及到类型的转换问题。 转换的方法有两种: 自动转换(隐式转换):遵循一定的规则,由编译系统自动完成强制类型转换:把表达式的运算结果强制转换成所需的数据类型 语法格…...

jmeter性能测试入门完整版
1. Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一。 本文为JMeter性能测试完整入门篇&…...

报错sql_mode=only_full_group_by
首发博客地址 https://blog.zysicyj.top/ 报错内容 ### The error may exist in file[D:\code\cppCode20221025\leader-system\target\classes\mapper\system\TJsonDataMapper.xml] ### The error may involve defaultParameterMap ### The error occurred while…...
伪造 IP 地址的原理和防范措施
在数字化时代,网络安全是至关重要的话题。其中,伪造 IP 地址是一种可能导致网络攻击和欺诈的技术手段。这里将深入探讨伪造 IP 地址的原理以及如何采取措施来防范这种风险。 一.伪造 IP 地址的原理 伪造 IP 地址是一种操纵网络通信的方式,它…...

Linux通过libudev获取挂载路径、监控U盘热拔插事件、U盘文件系统类型
文章目录 获取挂载路径监控U盘热拔插事件libusb 文件系统类型通过挂载点获取挂载路径添libudev加库 获取挂载路径 #include <stdio.h> #include <libudev.h> #include <string.h>int main() {struct udev *udev;struct udev_enumerate *enumerate;struct ud…...

【会议征稿】2023智能通信与网络国际学术会议(ICN 2023)
2023智能通信与网络国际学术会议(ICN 2023) 2023 International Conference on Intelligent Communication and Networking (ICN2023) 2023智能通信与网络国际学术会议(ICN 2023)将于2023年11月10-12日在中国常州召开。ICN 2023…...

Android投屏总结
#android手机投屏 ####导语 至于手机投屏的实现方法可谓五花八门,今天小袁就说下以开发人员的角度来说下当今手机的主流投屏方法。目前这种将终端信号经由WiFi传输到电视、电视盒的技术有三种:DLNA、AirPlay、Miracast、Google Cast。 ##手机投屏智能电…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...