AtCoder Beginner Contest 404 A-E 题解

news2025/5/9 12:12:44

在这里插入图片描述

还是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;
}

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

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

相关文章

【mysql】常用命令

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

macOS Arduino IDE离线安装ESP8266支持包

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

网络靶场基础知识

一、网络靶场的核心概念 网络靶场&#xff08;Cyber Range&#xff09;是一种基于虚拟化和仿真技术的网络安全训练与测试平台&#xff0c;通过模拟真实网络环境和业务场景&#xff0c;为攻防演练、漏洞验证、安全测试和人才培养提供安全可控的实验空间。其核心目标是通过“虚实…

Python项目源码57:数据格式转换工具1.0(csv+json+excel+sqlite3)

1.智能路径处理&#xff1a;自动识别并修正文件扩展名&#xff0c;根据转换类型自动建议目标路径&#xff0c;实时路径格式验证&#xff0c;自动补全缺失的文件扩展名。 2.增强型预览功能&#xff1a;使用pandastable库实现表格预览&#xff0c;第三方模块自己安装一下&#x…

雷赛伺服电机

ACM0经济 编码器17位&#xff1a; ACM1基本 编码器23位磁编&#xff0c; ACM2通用 编码器24位光电&#xff0c; 插头定义&#xff1a;

【deepseek教学应用】001:deepseek如何撰写教案并自动实现word排版

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

CH32V208GBU6沁恒绑定配对获取静态地址

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…

RT Thread Studio创建软件和硬件RTC工程

MCU型号&#xff1a;STM32F103RET6 一.配置软件模拟RTC 1.生成一个带串口输出的工程文件&#xff0c;新建RT-Thread项目工程文件。 2.查看电路图中的串口输出管脚&#xff0c;根据STMCubeMx软件可知此串口为USART1&#xff0c;选择芯片型号为STM32F103RET6&#xff0c;控制台…

苍穹外卖心得体会

1 登录认证 技术点&#xff1a;JWT令牌技术&#xff08;JSON Web Token&#xff09; JWT&#xff08;JSON Web Token&#xff09;是一种令牌技术&#xff0c;主要由三部分组成&#xff1a;Header头部、Payload载荷和Signature签名。Header头部存储令牌的类型&#xff08;如JW…

Zcanpro搭配USBCANFD-200U在新能源汽车研发测试中的应用指南(周立功/致远电子)

——国产工具链的崛起与智能汽车测试新范式 引言&#xff1a;新能源汽车测试的国产化突围 随着新能源汽车智能化、网联化程度的提升&#xff0c;研发测试面临三大核心挑战&#xff1a;多协议融合&#xff08;CAN FD/LIN/以太网&#xff09;、高实时性数据交互需求、复杂工况下…

青少年抑郁症患者亚群结构和功能连接耦合的重构

目录 1 研究背景及目的 2 研究方法 2.1 数据来源与参与者 2.1.1 MDD患者&#xff1a; 2.1.2 健康对照组&#xff1a; 2.2 神经影像分析流程 2.2.1 图像采集与预处理&#xff1a; 2.2.2 网络构建&#xff1a; 2.2.3 区域结构-功能耦合&#xff08;SC-FC耦合&#xff09…

SQL手工注入(DVWA)

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

【大模型系列篇】Qwen3开源全新一代大语言模型来了,深入思考,更快行动

Qwen3开源模型全览 Qwen3是全球最强开源模型&#xff08;MoEDense&#xff09; Qwen3 采用混合专家&#xff08;MoE&#xff09;架构&#xff0c;总参数量 235B&#xff0c;激活仅需 22B。 Qwen3 预训练数据量达 36T&#xff0c;并在后训练阶段多轮强化学习&#xff0c;将非思…

flutter 专题 一百零四 Flutter环境搭建

Flutter简介 Flutter 是Google开发的一个移动跨平台&#xff08;Android 和 iOS&#xff09;的开发框架&#xff0c;使用的是 Dart 语言。和 React Native 不同的是&#xff0c;Flutter 框架并不是一个严格意义上的原生应用开发框架。Flutter 的目标是用来创建高性能、高稳定性…

玩玩OCR

一、Tesseract: 1.下载windows版&#xff1a; tesseract 2. 安装并记下路径&#xff0c;等会要填 3.保存.py文件 import pytesseract from PIL import Image def ocr_local_image(image_path):try:pytesseract.pytesseract.tesseract_cmd rD:\Programs\Tesseract-OCR\tesse…

“Everything“工具 是 Windows 上文件名搜索引擎神奇

01 Everything 和其他搜索引擎有何不同 轻量安装文件。 干净简洁的用户界面。 快速文件索引。 快速搜索。 快速启动。 最小资源使用。 轻量数据库。 实时更新。 官网&#xff1a;https://www.voidtools.com/zh-cn/downloads/ 通过网盘分享的文件&#xff1a;Every…

TIME_WAIT状态+UDP概念及模拟实现服务器和客户端收发数据

目录 一、TIME_WAIT状态存在的原因 二、TIME_WAIT状态存在的意义 三、TIME_WAIT状态的作用 四、UDP的基本概念 4.1 概念 4.2 特点 五、模拟实现UDP服务器和客户端收发数据 5.1 服务器udpser 5.2 客户端udpcil 一、TIME_WAIT状态存在的原因 1.可靠的终止TCP连接。 2.…

一篇撸清 Http,SSE 与 WebSocket

HTTP,SSE 和WebSocket都是网络传输的协议,本篇快速介绍三者的概念和比较。 SSE(Server-Sent Events) 是什么? SSE(Server-Sent Events),服务器发送事件, 是一种基于 HTTP 的轻量级协议,允许服务器主动向客户端(如浏览器)推送实时数据。它设计用于单向通信(服务器到…

56、【OS】【Nuttx】编码规范解读(四)

背景 接之前 blog 53、【OS】【Nuttx】编码规范解读&#xff08;一&#xff09; 54、【OS】【Nuttx】编码规范解读&#xff08;二&#xff09; 55、【OS】【Nuttx】编码规范解读&#xff08;三&#xff09; 分析了行宽格式&#xff0c;注释要求&#xff0c;花括号风格等&#…

IOT项目——DIY 气象站

开源项目&#xff1a;ESP32 气象站 作者&#xff1a;GiovanniAggiustatutto 原文链接&#xff1a;原文 开源项目&#xff1a;太阳能 WiFi 气象站 V4.0 作者&#xff1a;opengreenenergy 原文链接&#xff1a;原文 DIY 气象站 简介1-制版2-物料 温度设备塔风向标风速计雨量计框…