AtCoder Beginner Contest 403(题解ABCDEF)

A - Odd Position Sum 

#1.奇数数位和

#include<iostream>
#include<vector>
#include<stdio.h>
#include<map>
#include<string>
#include<algorithm>
#include<queue>
#include<cstring>
#include<stack>
#include<array>
#include<cmath>
#include<set>
#include<unordered_set>
#include<unordered_map>
#include<iomanip>
using namespace std;
using ll = long long;
using llu = unsigned long long;
const ll inf = 0x3f3f3f3f3f3f3f3fll;
const ll MIN = -9187201950435737472ll;
ll mod = 1e9 + 7;
ll base = 131;
const int N = 1e4 + 10;
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n;cin>>n;int sum=0,x;for(int i=1;i<=n;i++){cin>>x;if(i&1)sum+=x;}cout<<sum<<endl;return 0;
}

B - Four Hidden  

 #1.暴力判断即可,遇到#可任意匹配

#include<iostream>
#include<vector>
#include<stdio.h>
#include<map>
#include<string>
#include<algorithm>
#include<queue>
#include<cstring>
#include<stack>
#include<array>
#include<cmath>
#include<set>
#include<unordered_set>
#include<unordered_map>
#include<iomanip>
using namespace std;
using ll = long long;
using llu = unsigned long long;
const ll inf = 0x3f3f3f3f3f3f3f3fll;
const ll MIN = -9187201950435737472ll;
ll mod = 1e9 + 7;
ll base = 131;
const int N = 1e4 + 10;
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);string s1,s2;cin>>s1>>s2;int n=s1.length(),m=s2.length();s1="#"+s1;s2="#"+s2;for(int i=1;i+m-1<=n;i++){if(s1[i]==s2[1]||s1[i]=='?'){int j=i;int cnt=0;for(int j=i;j<=i+m-1;j++){if(s1[j]=='?'||s1[j]==s2[j-i+1])cnt++;}if(cnt==m){cout<<"Yes"<<endl;return 0;}}}cout<<"No"<<endl;return 0;
}

 C - 403 Forbidden

#1.set的简单应用

#include<iostream>
#include<vector>
#include<stdio.h>
#include<map>
#include<string>
#include<algorithm>
#include<queue>
#include<cstring>
#include<stack>
#include<array>
#include<cmath>
#include<set>
#include<unordered_set>
#include<unordered_map>
#include<iomanip>
using namespace std;
using ll = long long;
using llu = unsigned long long;
const ll inf = 0x3f3f3f3f3f3f3f3fll;
const ll MIN = -9187201950435737472ll;
ll mod = 1e9 + 7;
ll base = 131;
const int N = 2e6+ 10;
set<pair<int,int>>st;
bool vis[N];
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n,m,q;cin>>n>>m>>q;int ty,x,y;while(q--){cin>>ty;if(ty==1){cin>>x>>y;st.insert({x,y});}else if(ty==2){cin>>x;vis[x]=true;}else{cin>>x>>y;if(vis[x])cout<<"Yes"<<endl;else{if(st.count({x,y}))cout<<"Yes"<<endl;else cout<<"No"<<endl;}}}return 0;
}

D - Forbidden Difference 

给一个序列,我们需要删除一些元素,让剩下元素满足任意两个差的绝对值不等于d,问删的最小值

#1.给定ai和d的值域都很小,可以开一个1e6的桶,来记录ai中每个值出现的次数

#2.注意到当差的绝对值为d时,在1e6的范围中是以d为步幅递增的,也就是同余的,考虑将数对d取模 ,单独存在一个vector中,存在vector的中的是出现次数

#3.于是问题变成了一个经典dp问题--相邻不取取最大,最后拿总数减剩下的就是答案(特判d==0)

#include<iostream>
#include<vector>
#include<stdio.h>
#include<map>
#include<string>
#include<algorithm>
#include<queue>
#include<cstring>
#include<stack>
#include<array>
#include<cmath>
#include<set>
#include<unordered_set>
#include<unordered_map>
#include<iomanip>
using namespace std;
using ll = long long;
using llu = unsigned long long;
const ll inf = 0x3f3f3f3f3f3f3f3fll;
const ll MIN = -9187201950435737472ll;
ll mod = 1e9 + 7;
ll base = 131;
const int N = 1e6+10;
const int M=1e6;
int cnt[N];
int a[N];
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n,d;cin>>n>>d;for(int i=1;i<=n;i++){cin>>a[i];cnt[a[i]]++;}if(d==0){int sz=0;for(int i=0;i<=M;i++){sz+=cnt[i]>0;}cout<<n-sz<<endl;return 0;}int sum=0;for(int i=0;i<d;i++){vector<int>b(1,0);for(int j=i;j<=M;j+=d){b.push_back(cnt[j]);}int sz=b.size()-1;vector<int>dp(sz+1,-1);dp[1]=b[1];if(sz>=2)dp[2]=max(dp[1],b[2]);for(int j=3;j<=sz;j++){dp[j]=max(dp[j-1],dp[j-2]+b[j]);}sum+=dp[sz];}cout<<n-sum<<endl;return 0;
}

 E - Forbidden Prefix

给两个字符串集合x和y,q次操作,操作1是向x中添加字符串,操作2是对y中添加字符串,每次添加后输出y中不以x中字符串为前缀的字符串

#1.求解字符串前缀问题考虑字典树,要维护e数组,即有多少字符串经过该节点,每次要输出的就是e[0]

#2.对操作1的删除,有两种情况,一种是添加的这个字符串它的前缀已经在x中出现,那就不用考虑,可以用vis标记x中字符串结尾,经过vis不为0的节点,说明前缀出现过。另一种是从未出现过,那就要将经过过该节点的节点都要减去这个节点的e值,代表这个前缀已经删除

#3.接下来是向y中添加字符串,判断路径是否经过x的前缀即可,用vis判断

#include<iostream>
#include<vector>
#include<stdio.h>
#include<map>
#include<string>
#include<algorithm>
#include<queue>
#include<cstring>
#include<stack>
#include<array>
#include<cmath>
#include<set>
#include<unordered_set>
#include<unordered_map>
#include<iomanip>
using namespace std;
using ll = long long;
using llu = unsigned long long;
const ll inf = 0x3f3f3f3f3f3f3f3fll;
const ll MIN = -9187201950435737472ll;
ll mod = 1e9 + 7;
ll base = 131;
const int N = 1e5 + 10;
int nxt[30*N][26];
int vis[30*N],cnt=0,sz=0,l,e[30*N];
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int q,ty;cin>>q;string s;while(q--){cin>>ty;if(ty==1){cin>>s;l=s.length();int now=0;bool tag=true;for(int i=0;i<l;i++){int x=s[i]-'a';if(!nxt[now][x])nxt[now][x]=++cnt;now=nxt[now][x];if(vis[now])tag=false;}vis[now]=1;if(tag){int y=0;e[y]-=e[now];for(int i=0;i<l;i++){int x=s[i]-'a';y=nxt[y][x];e[y]-=e[now];}}}else{cin>>s;l=s.length();int now=0;bool tag=true;for(int i=0;i<l;i++){int x=s[i]-'a';if(!nxt[now][x])nxt[now][x]=++cnt;now=nxt[now][x];if(vis[now])tag=false;}if(tag){now=0;e[now]++;for(int i=0;i<l;i++){int x=s[i]-'a';now=nxt[now][x];e[now]++;}}}cout<<e[0]<<endl;}return 0;
}

F - Shortest One Formula 

用一些1和+,*来构成一个表达式,使其结果为n,求最短表达式

#1.n只有2000,考虑暴力递推,由于一个加法表达式和一个乘法表达式相乘时加法表达式需要加括号,那就将加法与乘法分开考虑,给f[i]表示最后一次操作是加法结果是i的字符串,g[i]表示最后一次操作时乘法结果时i的字符串

#2.从1递推到n,特判1,11,111,1111,其他的递推到i是,分解i为x+y后x*y,一一枚举,更新f[i]与g[i]

#include<iostream>
#include<vector>
#include<stdio.h>
#include<map>
#include<string>
#include<algorithm>
#include<queue>
#include<cstring>
#include<string>
#include<stack>
#include<array>
#include<cmath>
#include<set>
#include<unordered_set>
#include<unordered_map>
#include<iomanip>
using namespace std;
using ll = long long;
using llu = unsigned long long;
const ll inf = 0x3f3f3f3f3f3f3f3fll;
const ll MIN = -9187201950435737472ll;
ll mod = 1e9 + 7;
ll base = 131;
const int N =2e3+10;
string f[N],g[N];
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n;cin>>n;for(int i=1;i<=n;i++){if(i==1){f[i]="1";g[i]="1";}else if(i==11){f[i]="11";g[i]="11";}else if(i==111){f[i]="111";g[i]="111";}else if(i==1111){f[i]="1111";g[i]="1111";}else{f[i]=f[1]+"+"+f[i-1];for(int x=1;x+x<=i;x++){int y=i-x;if(f[x].size()+f[y].size()+1<f[i].size()){f[i]=f[x]+"+"+f[y];}if(f[x].size()+g[y].size()+1<f[i].size()){f[i]=f[x]+"+"+g[y];}if(g[x].size()+f[y].size()+1<f[i].size()){f[i]=g[x]+"+"+f[y];}if(g[x].size()+g[y].size()+1<f[i].size()){f[i]=g[x]+"+"+g[y];}}g[i]="("+f[i]+")"+"*"+g[1];for(int x=1;x<=i/x;x++){if(i%x)continue;int y=i/x;if(f[x].size()+f[y].size()+5<g[i].size()){g[i]="("+f[x]+")"+"*"+"("+f[y]+")";}if(f[x].size()+g[y].size()+3<g[i].size()){g[i]="("+f[x]+")"+"*"+g[y];}if(g[x].size()+f[y].size()+3<g[i].size()){g[i]=g[x]+"*"+"("+f[y]+")";}if(g[x].size()+g[y].size()+1<g[i].size()){g[i]=g[x]+"*"+g[y];}}}}if(f[n].size()<g[n].size()){cout<<f[n]<<endl;}else cout<<g[n]<<endl;return 0;
}

 

 

 

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

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

相关文章

【Game】Powerful——Abandoned Ruins(9)

文章目录 1、新增古玩2、机关机制3、探索法宝4、智斗强敌5、地图6、参考 2025 年 1 月迎来的新玩法——荒废遗迹 每周四个宝藏铲&#xff08;老玩法&#xff09;或者两个遗迹线索&#xff08;新玩法&#xff09;&#xff0c;3 个宝藏铲也可以换一个遗迹线索&#xff0c;之前没时…

构建网页版IPFS去中心化网盘

前言&#xff1a;我把它命名为无限网盘 Unlimited network disks&#xff08;ULND&#xff09;&#xff0c;可以实现简单的去中心化存储&#xff0c;其实实现起来并不难&#xff0c;还是依靠强大的IPFS&#xff0c;跟着我一步一步做就可以了。 第一步&#xff1a;准备开发环境…

国标GB28181视频平台EasyGBS在物业视频安防管理服务中的应用方案​

一、方案背景​ 在现代物业服务中&#xff0c;高效的安全管理与便捷的服务运营至关重要。随着科技的不断发展&#xff0c;物业行业对智能化、集成化管理系统的需求日益增长。EasyGBS作为一款基于国标GB28181协议的视频监控平台&#xff0c;具备强大的视频管理与集成能力&#…

[Unity]设置自动打包脚本

背景 我们经常会使用自动打包功能 文件名称: AutoBuild.csusing System.IO; using System.Linq; using UnityEditor; using UnityEngine;public class AutoBuilder {[MenuItem("Build/GetCurrentBuildTarget")]public static void GetCurrentBuildTarget(){Debug.L…

正点原子STM32H743单片机实现ADC多通道检测

目标 使用STM32CubeMX工具&#xff0c;配置ADC相关参数&#xff0c;实现在STM32H743单片机上获取ADC多通道电压值。共14个ADC引脚&#xff0c;ADC2有5个&#xff0c;ADC3有9个&#xff0c;全部设置单通道 ADC引脚 PF3PF4PF5PF10PC0PC2PC3PH2PH3PA3PB0PB1PA4PA5PA6 STM32cube…

深度学习基础(四)——计算量(FLOPs)、参数量(Params)、计算速度(FLOPS/TOPS))

一、计算量FLOPs FLOPs&#xff0c;全称为Floating Point Operations, (s为复数缩写&#xff09;&#xff0c;浮点运算数&#xff0c;指模型完成一次前向传播所需的浮点运算次数&#xff0c;可以理解为计算量&#xff08;模型的时间复杂度&#xff09;&#xff0c;用来衡量算法…

电子秤检测管理系统开发实战:从数据采集到可视化大屏

简介 电子秤作为现代工业生产和商业流通中的核心计量设备,其准确性直接关系到产品质量和交易公平。针对仙贝生产企业的电子秤管理需求,我们开发了一套集电子秤检测信息录入、产品信息管理、实时称重数据采集和后台可视化大屏于一体的综合管理系统。该系统基于Django框架构建…

Cesium添加WMS,WMTS,地形图图,3D Tiles数据

在 Cesium 中&#xff0c;你可以添加 WMS、WMTS、地形图 和 3D Tiles 数据源。以下是详细的实现方法&#xff1a; 1. 添加 WMS 服务 WMS&#xff08;Web Map Service&#xff09;是一种动态地图服务&#xff0c;适用于加载栅格地图图层。 代码示例 const viewer new Cesium…

数据库基本概念:数据库的定义、特点、分类、组成、作用

一&#xff1a;数据库相关概念 1.1 定义 &#xff08;1&#xff09;数据库&#xff1a;存储数据的仓库 &#xff08;2&#xff09;数据库管理系统&#xff1a;模拟和管理数据库的大型软件 &#xff08;3&#xff09;SQL&#xff1a;操作关系型数据库的编程语言&#xff0c;定义…

【项目篇之消息序列化】仿照RabbitMQ模拟实现消息队列

实现消息序列化 为什么不使用JSON来序列化直接使用二进制序列化实现序列化方法toBytes()1&#xff1a; 创建内存缓冲区​​2 &#xff1a;创建对象序列化通道​3&#xff1a;执行序列化操作​4&#xff1a;提取二进制数据&#xff0c;转换成byte[]序列化图示流程&#xff1a;序…

单片机-89C51部分:13、看门狗

飞书文档https://x509p6c8to.feishu.cn/wiki/LefkwDPU7iUUWBkfKE9cGLvonSh 一、作用 程序发生死循环的时候&#xff08;跑飞&#xff09;&#xff0c;能够自动复位。 启动看门狗计数器->计数器计数->指定时间内不对计数器赋值&#xff08;主程序跑飞&#xff0c;无法喂…

C++23/26 静态反射机制深度解析:编译时元编程的新纪元

目录 引言 一、C静态反射的核心特性 1. 编译时元数据获取 2. 元信息操作的语法革新 3. 与现有特性的深度融合 二、应用场景&#xff1a;从理论到实践 1. 序列化与反序列化 2. 领域特定语言&#xff08;DSL&#xff09;与代码生成 3. 动态插件系统 4. 调试与元编程增强…

RISCV学习(5)GD32VF103 MCU架构了解

RISCV学习&#xff08;5&#xff09;GD32VF103 MCU架构了解 1、芯片内核功能简介 GD32VF103 MCU架构&#xff0c;采用Bumblebee内核&#xff0c;芯来科技&#xff08;Nuclei System Technology&#xff09;与台湾晶心科技&#xff08;Andes Technology&#xff09;联合开发&am…

【Java学习笔记】递归

递归&#xff08;recursion&#xff09; 思想&#xff1a;把一个复杂的问题拆分成一个简单问题和子问题&#xff0c;子问题又是更小规模的复杂问题&#xff0c;循环往复 本质&#xff1a;栈的使用 递归的注意事项 &#xff08;1&#xff09;需要有递归出口&#xff0c;否者就…

渗透测试中的那些“水洞”:分析与防御

1. Nginx 版本泄露 风险分析&#xff1a; Nginx 默认会在响应头中返回 Server: nginx/x.x.x&#xff0c;攻击者可利用该信息匹配已知漏洞进行攻击。 防御措施&#xff1a; 修改 nginx.conf 配置文件&#xff0c;隐藏版本信息&#xff1a;server_tokens off;使用 WAF 进行信息…

基于C#开发的适合Windows开源文件管理器

使用DDD从零构建一个完整的系统 推荐一个功能强大且直观的开源文件管理器&#xff0c;适用于Windows平台。 01 项目简介 该项目是一个基于C#开发、开源的文件管理器&#xff0c;适用于Windows&#xff0c;界面UI美观、方便轻松浏览文件。此外&#xff0c;支持创建和提取压缩…

实习入职的总结

我是4月14号入职的&#xff0c;到现在差不多已经三个礼拜了&#xff0c;今天想总结一下这段时间的工作情况&#xff0c;并给学弟学妹们提供一些指引。 目前&#xff0c;我所在的公司是一家初创企业&#xff0c;专注于IPC安防领域。作为一名大专生&#xff0c;我深知自己的学历在…

Ubuntu 系统上部署 Kubernetes 的完整指南

Ubuntu 系统上部署 Kubernetes 的完整指南 一、环境准备&#xff08;Ubuntu 22.04/24.04&#xff09;1. 系统初始化2. 安装容器运行时&#xff08;containerd&#xff09;3. 安装 Kubernetes 组件&#xff08;kubeadm, kubelet, kubectl&#xff09; 二、部署 Kubernetes 集群1…

partition_pdf 和chunk_by_title 的区别

from unstructured.partition.pdf import partition_pdf from unstructured.chunking.title import chunk_by_titlepartition_pdf 和 chunk_by_title 初看有点像&#xff0c;都在"分块"&#xff0c;但是它们的本质完全不一样。 先看它们核心区别 partition_pdfchun…

基于深度学习的医疗诊断辅助系统设计

标题:基于深度学习的医疗诊断辅助系统设计 内容:1.摘要 随着医疗数据的爆炸式增长和深度学习技术的飞速发展&#xff0c;开发基于深度学习的医疗诊断辅助系统具有重要的现实意义。本研究的目的在于设计一个高效、准确的医疗诊断辅助系统&#xff0c;以辅助医生进行更精准的诊断…