AtCoder Beginner Contest 404 A-E 题解
还是ABC好打~比ARC好打多了(
题解部分
A - Not Found
给定你一个长度最大25的字符串,任意输出一个未出现过的小写字母
签到题,map或者数组下标查询一下就好
#include<bits/stdc++.h>using namespace std;#define int long long
#define lowbit(x) x&(-x)const int MOD=1e9+7;
const int N=1000100;int a[N];void solve() {init();string s;cin>>s;map<char,int>mp;int len = s.length();for(int i=0;i<len;i++) {mp[s[i]]=1;}for(int i=0;i<26;i++) {if(!mp[(char)('a'+i)]) {cout<<(char)('a'+i);return ;}}
}signed main() {//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);//cout<<prime[cnt-1]<<"\n";//for(int i=1;i<=cnt;i++) cout<<prime[i]<<"\n";int t=1;//cin>>t;while(t--) {solve();}return 0;
}
B - Grid Rotation
给定两个二维字符数组,你能进行两种操作:将第一个字符数组顺时针旋转90度或者将第一个字符数组任意位置改为任意字符,问你最少需要多少次操作能将第一个字符数组变成第二个字符数组
纯模拟题,单独封装一个函数用于数组的旋转即可(不会有人真的手动写完旋转后的数组吧)
代码如下:
#include<bits/stdc++.h>using namespace std;#define int long long
#define lowbit(x) x&(-x)const int MOD=1e9+7;
const int N=1000100;int a[N];char b[110][110];
char c[110][110];
char t[110][110];int n;int minvalue = MOD;void rev() {for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) {c[i][j] = b[n-j+1][i];}}for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++)b[i][j] = c[i][j];}
}void solve() {init();cin>>n;for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) cin>>b[i][j];}for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) cin>>t[i][j];}for(int i=1;i<=4;i++) {int sum=0;for(int j=1;j<=n;j++) {for(int k=1;k<=n;k++) {if(b[j][k] != t[j][k]) sum++;}}//cout<<sum<<"\n";minvalue = min(minvalue,sum + i - 1);rev();}cout<<minvalue<<"\n";
}signed main() {//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);//cout<<prime[cnt-1]<<"\n";//for(int i=1;i<=cnt;i++) cout<<prime[i]<<"\n";int t=1;//cin>>t;while(t--) {solve();}return 0;
}
C - Cycle Graph?
给定你n个节点m条边,问你这个图是否有且仅有一条连接所有节点的欧拉回路
很简单,只要满足有n条边,每个点都是联通的并且每个点都有两条边就行
代码如下:
#include<bits/stdc++.h>using namespace std;#define int long long
#define lowbit(x) x&(-x)const int MOD=1e9+7;
const int N=1000100;void init() {}mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int Base = uniform_int_distribution<>(8e8,9e8)(rng);int a[N];vector<int>G[N];
int num;
int vis[N];void dfs(int t){vis[t]=1;num++;for(int i=0;i<G[t].size();i++) {int son = G[t][i];if(!vis[son]) {dfs(son);}}if(G[t].size() != 2) num = MOD;
}void solve() {init();int n,m;cin>>n>>m;for(int i=1;i<=m;i++) {int u,v;cin>>u>>v;G[u].push_back(v);G[v].push_back(u);}if(m != n) {cout<<"No\n";return ;}dfs(1);if(num != n) cout <<"No\n";else cout<<"Yes\n";
}signed main() {//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);//cout<<prime[cnt-1]<<"\n";//for(int i=1;i<=cnt;i++) cout<<prime[i]<<"\n";int t=1;//cin>>t;while(t--) {solve();}return 0;
}
D - Goin’ to the Zoo
有n个动物园以及m个动物,告诉你每个动物在哪些动物园都有,每次去第i个动物园都需要支付 C i C_i Ci元,多次去同一个动物园看同一个动物视为看了某个动物多次,问你最少需要多少元能够满足每个动物至少都看了两次
刚开始我只想着简单的做法,所以小卡了一手这个地方,后面看范围越看越感觉能暴力。仔细一算,3的10次方大概1e4,完全可以直接爆搜,然后就用爆搜的做法过了
由于每个动物只需要看两次,也就是说我最多去同一个动物园两次,所以我只需要暴力搜索去某个动物园2次,1次,0次的情况就好
代码如下:
#include<bits/stdc++.h>using namespace std;
#define int long long
const int N=1000100;
const int MOD=1e9+7;
vector<int>G[N];
vector<int>H[N];
int vis[N];
int n,m;
int minvalue = 20 * MOD;
int cost;
int a[N];void dfs(int t)
{//cout<<t<<"||"<<cost<<"\n";if(t == n+1){int sign=1;for(int i=1;i<=m;i++){if(vis[i] < 2){sign = 0;break;}}if(sign) minvalue = min(minvalue,cost);return ;}//去两次动物园的情况 for(int i=0;i<G[t].size();i++){int v = G[t][i];vis[v]+=2;}cost += a[t] * 2;dfs(t+1);cost -= a[t];//去一次动物园的情况 for(int i=0;i<G[t].size();i++){int v = G[t][i];vis[v]--;}dfs(t+1);cost -= a[t];//去零次动物园的情况 for(int i=0;i<G[t].size();i++){int v = G[t][i];vis[v]--;}dfs(t+1);
}void solve()
{cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];map< pair<int,int> , int>mp;for(int i=1;i<=m;i++){int num;cin>>num;for(int j=1;j<=num;j++){int v;cin>>v;if(!mp[{v,i}]) G[v].push_back(i),mp[{v,i}]=1;}}// for(int i=1;i<=n;i++)
// {
// for(int j=0;j<G[i].size();j++) cout<<G[i][j]<<" ";
// cout<<"\n";
// }dfs(1);cout<<minvalue;
}signed main()
{int t=1;while(t--){solve();}return 0;
}
E - Bowls and Beans
给你n个碗,每个碗都有一个对应的 C i C_i Ci,初始时候每个碗里面都有 a i a_i ai个豆,每次操作你都可以将某个碗里面豆移动到这个碗左边 C i C_i Ci个碗中,问你最少需要多少次操作能够将所有豆移动到第一个碗里面
关于这道题我们需要理清一下思绪,首先先看某一个豆移动到第一个碗的操作,我每次遍历我当前能够到达的范围范围1,然后再遍历这个范围1,找到这个范围里面每个碗能够移动的最左边得到范围2,然后再让范围1扩张为范围2,重复操作,我所进行的操作次数就是只看这一个豆的情况下所需要的操作次数
那可能就有人要问了,为什么不是bfs去找层次呢,所以接下来就是重点,当我多个豆到达同一个碗,接下来我只需要一次操作就能将这些豆移走,也就是说我知道多个豆在哪个位置进入同一个碗,这是bfs难以做到的一点
考虑到以上这一点,我们不难得知一点:当左边的豆已经找到最短移动到第一个碗的时候,对于当前这个豆,我们只需要用最少的操作次数移动到前面已经找到最短移动路径即可
那么我们代码部分应该如何打呢,那我们就需要从左边开始遍历,当这个碗里面有豆的时候,我们不断重复前面提到的只看某一个豆的移动,一直重复到我可以移动到第一个碗或者是已经找到最短路径的碗即可
代码如下:
#include<bits/stdc++.h>using namespace std;#define int long long
#define lowbit(x) x&(-x)const int MOD=1e9+7;
const int N=1000100;mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int Base = uniform_int_distribution<>(8e8,9e8)(rng);int a[N];
int c[N];void solve() {init();int n;cin>>n;for(int i=1;i<=n-1;i++) cin>>c[i];for(int i=1;i<=n-1;i++) cin>>a[i];int res=0;int pre=0;for(int i=1;i<=n;i++) {if(a[i]) {int left = i,right=i;while(left > pre) {res ++;int nxtleft=left;for(int j=left;j<=right;j++) {nxtleft = min(nxtleft,j - c[j]);}left = nxtleft;}pre = i;}}cout<<res<<"\n";
}signed main() {//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);//cout<<prime[cnt-1]<<"\n";//for(int i=1;i<=cnt;i++) cout<<prime[i]<<"\n";int t=1;//cin>>t;while(t--) {solve();}return 0;
}
相关文章:

AtCoder Beginner Contest 404 A-E 题解
还是ABC好打~比ARC好打多了( 题解部分 A - Not Found 给定你一个长度最大25的字符串,任意输出一个未出现过的小写字母 签到题,map或者数组下标查询一下就好 #include<bits/stdc.h>using namespace std;#define int long long #def…...

【mysql】常用命令
一 系统mysql用户密码查询 1、在工程目录如/usr/local/httpd/下的*.php中查找类似有db.inf的文件 以php为例。 2、在代码文件中确认有数据库连接的的功能实现 例如: $dbconf parse_ini_file(/usr/local/httpd/conf/db.inf); $link mysql_connect($dbconf[d…...

macOS Arduino IDE离线安装ESP8266支持包
其实吧,本来用platformio也是可以的,不过有时候用Arduino IDE可能更快一些,因为以前一直是Arduino.app和Arduino IDE.app共存了一段时间,后来下决心删掉Arduino.app并升级到最新的Arduino IDE.app。删除了旧的支持板级支持包之后就…...

网络靶场基础知识
一、网络靶场的核心概念 网络靶场(Cyber Range)是一种基于虚拟化和仿真技术的网络安全训练与测试平台,通过模拟真实网络环境和业务场景,为攻防演练、漏洞验证、安全测试和人才培养提供安全可控的实验空间。其核心目标是通过“虚实…...
基于Partial Cross Entropy的弱监督语义分割实战指南
一、问题背景:弱监督学习的挑战 在计算机视觉领域,语义分割任务面临最大的挑战之一是**标注成本**。以Cityscapes数据集为例,单张图像的像素级标注需要约90分钟人工操作。这催生了弱监督学习(Weakly Supervised Learning)的研究方向,其中partial cross entropy loss(部…...
【算法基础】选择排序算法 - JAVA
一、算法基础 1.1 什么是选择排序 选择排序是一种简单直观的排序算法,它的工作原理是:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小…...
电商平台的流量秘密:代理IP在用户行为分析中的角色
在电商江湖中,流量是氧气,用户行为数据是DNA。当你在电商平台点击商品、加入购物车时,背后有一套精密的系统正在分析你的每个动作。而在这套系统的运作中,代理IP正扮演着"隐形推手"的角色——它既是数据采集的"隐身…...
批量清洗与修改 YOLO 标签:删除与替换指定类别
在使用 YOLO 格式的数据进行训练或部署前,常常需要对标签文件进行清洗或修改。本文整理了两种常见场景的 Python 脚本:删除指定类别 和 修改某类为其他类,并支持自动打印检测到该类别的文件名,帮助你快速定位问题数据。 …...

Python项目源码57:数据格式转换工具1.0(csv+json+excel+sqlite3)
1.智能路径处理:自动识别并修正文件扩展名,根据转换类型自动建议目标路径,实时路径格式验证,自动补全缺失的文件扩展名。 2.增强型预览功能:使用pandastable库实现表格预览,第三方模块自己安装一下&#x…...
TypeScript 中,属性修饰符
在 TypeScript 中,属性修饰符(Property Modifiers)是用于修饰类的属性或方法的关键字,它们可以改变属性或方法的行为和访问权限。TypeScript 提供了三种主要的属性修饰符:public、private 和 protected。此外ÿ…...

雷赛伺服电机
ACM0经济 编码器17位: ACM1基本 编码器23位磁编, ACM2通用 编码器24位光电, 插头定义:...
基础编程题目集 6-8 简单阶乘计算
本题要求实现一个计算非负整数阶乘的简单函数。 函数接口定义: int Factorial( const int N ); 其中N是用户传入的参数,其值不超过12。如果N是非负整数,则该函数必须返回N的阶乘,否则返回0。 裁判测试程序样例: #in…...

【deepseek教学应用】001:deepseek如何撰写教案并自动实现word排版
本文讲述利用deepseek如何撰写教案并自动实现word高效完美排版。 文章目录 一、访问deepseek官网二、输入教案关键词三、格式转换四、word进一步排版 一、访问deepseek官网 官网:https://www.deepseek.com/ 进入主页后,点击【开始对话】,如…...

CH32V208GBU6沁恒绑定配对获取静态地址
从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…...
【C/C++】RPC与线程间通信:高效设计的关键选择
文章目录 RPC与线程间通信:高效设计的关键选择1 RPC 的核心用途2 线程间通信的常规方法3 RPC 用于线程间通信的潜在意义4 主要缺点与限制4.1 缺点列表4.2 展开 5 替代方案6 结论 RPC与线程间通信:高效设计的关键选择 在C或分布式系统设计中,…...
跨线程和跨进程通信还有多种方式对比
📊 常见通信机制对比 通信方式跨线程支持跨进程支持同步/异步性能编程复杂度特点与适用场景SendMessage✅✅(同桌面)同步较高(阻塞)低简单窗口通信、控制PostMessage✅✅(同桌面)异步高低通知、事件触发COM/DCOM✅✅同步/异步中中高系统级服务、进程间服务封装Socket✅…...

RT Thread Studio创建软件和硬件RTC工程
MCU型号:STM32F103RET6 一.配置软件模拟RTC 1.生成一个带串口输出的工程文件,新建RT-Thread项目工程文件。 2.查看电路图中的串口输出管脚,根据STMCubeMx软件可知此串口为USART1,选择芯片型号为STM32F103RET6,控制台…...
Oracle EBS AP发票被预付款核算创建会计科目时间超长
背景 由于客户职能部门的水电、通信和物业等等费用统一管理或对接部门报销费,在报销费的时候,用户把所有费用分摊到各个末级部门,形成AP发票行有上千行, 问题症状 1、用户过账时,请求创建会计科目一直执行20多个小时未完成,只能手工强行取消请求。 2、取消请求以后,从后…...
驱动开发硬核特训 · Day 30(下篇): 深入解析 lm48100q I2C 音频编解码器驱动模型(基于 i.MX8MP)
作者:嵌入式Jerry 视频教程请关注 B 站:“嵌入式Jerry” 一、背景与目标 在本篇中,我们围绕 TI 的 lm48100q 音频编解码器 展开,深入讲解其作为 I2C 外设如何集成至 Linux 内核音频子系统(ASoC)࿰…...
运维--计划任务
计划任务分为一次性和循环性的计划任务 1.date的用法 date 月日时分年 eg:date 100118222023 date:查看时间和日期、修改时间和日期 获取当前日期:date +%F F:日期 获取当前时间:date +%H:%M:%S H:时 M:分 S:秒 获取周几: date +%w w:周 …...

苍穹外卖心得体会
1 登录认证 技术点:JWT令牌技术(JSON Web Token) JWT(JSON Web Token)是一种令牌技术,主要由三部分组成:Header头部、Payload载荷和Signature签名。Header头部存储令牌的类型(如JW…...
Python爬虫实战:获取jd商城最新5060ti 16g显卡销量排行榜商品数据并做分析,为显卡选购做参考
一、引言 1.1 研究目的 本研究旨在利用 Python 爬虫技术,从京东商城获取 “5060ti 16g” 型号显卡的商品数据,并对这些数据进行深入分析。具体目标包括: 实现京东商城的模拟登录,突破登录验证机制,获取登录后的访问权限。高效稳定地爬取按销量排名前 20 的 “5060ti 16g…...
Fedora升级Google Chrome出现GPG check FAILED问题解决办法
https://dl.google.com/linux/linux_signing_key.pub 的 GPG 公钥(0x7FAC5991)已安装 https://dl.google.com/linux/linux_signing_key.pub 的 GPG 公钥(0xD38B4796)已安装 仓库 "google-chrome" 的 GPG 公钥已安装,但是不适用于此软件包。 请检查此仓库的…...
信息系统监理师第二版教材模拟题第三组(含解析)
信息系统监理师模拟题第三组(30题) 监理基础理论 信息系统工程监理的性质是( ) A. 服务性、独立性、公正性、科学性 B. 强制性、营利性、行政性、技术性 C. 临时性、从属性、随意性、主观性 D. 单一性、封闭性、被动性、保守性答案:A 解析:监理具有服务性、独立性、公正…...

Zcanpro搭配USBCANFD-200U在新能源汽车研发测试中的应用指南(周立功/致远电子)
——国产工具链的崛起与智能汽车测试新范式 引言:新能源汽车测试的国产化突围 随着新能源汽车智能化、网联化程度的提升,研发测试面临三大核心挑战:多协议融合(CAN FD/LIN/以太网)、高实时性数据交互需求、复杂工况下…...

青少年抑郁症患者亚群结构和功能连接耦合的重构
目录 1 研究背景及目的 2 研究方法 2.1 数据来源与参与者 2.1.1 MDD患者: 2.1.2 健康对照组: 2.2 神经影像分析流程 2.2.1 图像采集与预处理: 2.2.2 网络构建: 2.2.3 区域结构-功能耦合(SC-FC耦合)…...

SQL手工注入(DVWA)
手工SQL注入攻击的标准思路 Low等级 (1)判断是否存在注入 (2)猜解字段个数 (3)确定字段顺序 (4)获取当前数据库 (5)获取当前数据库中的表 (…...

【大模型系列篇】Qwen3开源全新一代大语言模型来了,深入思考,更快行动
Qwen3开源模型全览 Qwen3是全球最强开源模型(MoEDense) Qwen3 采用混合专家(MoE)架构,总参数量 235B,激活仅需 22B。 Qwen3 预训练数据量达 36T,并在后训练阶段多轮强化学习,将非思…...
第 11 届蓝桥杯 C++ 青少组中 / 高级组省赛 2020 年真题,选择题详细解释
一、选择题 第 2 题 在二维数组按行优先存储的情况下,元素 a[i][j] 前的元素个数计算如下: 1. **前面的完整行**:共有 i 行,每行 n 个元素,总计 i * n 个元素。 2. **当前行的前面元素**:在行内&#x…...

flutter 专题 一百零四 Flutter环境搭建
Flutter简介 Flutter 是Google开发的一个移动跨平台(Android 和 iOS)的开发框架,使用的是 Dart 语言。和 React Native 不同的是,Flutter 框架并不是一个严格意义上的原生应用开发框架。Flutter 的目标是用来创建高性能、高稳定性…...