[补题记录] Atcoder Beginner Contest 308(C~E)

news2024/12/23 6:14:53

URL:https://atcoder.jp/contests/abc308

目录

C

Problem/题意

Thought/思路

Code/代码

D

Problem/题意

Thought/思路

Code/代码

E

Problem/题意

Thought/思路

Code/代码


C

Problem/题意

给出n个(a,b)数对,定义成功率为 a / (a + b),按照成功率降序排序,输出数对编号。

Thought/思路

坑:当成功率相同时,要求编号小的在前。

Code/代码

#include "bits/stdc++.h"

#define int long long

int n;
struct node {
	int id;
	int a, b;
	bool operator < (const node &t) const {
		if (a * (t.a + t.b) == t.a * (a + b)) return id < t.id; // 按原顺序比较
		else return a * (t.a + t.b) > t.a * (a + b);
	}
};

signed main() {
	std::cin >> n;
	std::vector <node> rate(n + 1);

	for (int i = 1; i <= n; ++ i) {
		std::cin >> rate[i].a >> rate[i].b;
		rate[i].id = i;
	}

	std::sort(rate.begin() + 1, rate.end());

	for (int i = 1; i <= n; ++ i) {
		std::cout << rate[i].id << " ";
	}
}

D

Problem/题意

给一个n * m的矩阵,由小写字母组成,问是否能从(1,1)走到(n,m)。行走规则是:按照“s、n、u、k、e”循环的顺序来走,也就是一开始从s出发,下一步只能走到n;当走到e,下一步只能走到s。

Thought/思路

简单bfs。

能走到的地方标记为1,其实就是vis。

Code/代码

#include "bits/stdc++.h"

int n, m, vis[507][507];
char mp[507][507];

const char path[6] = {'s', 'n', 'u', 'k', 'e'};
const int dx[5] = {0, 1, 0, -1, 0};

bool check(int x, int y, char target) {
	if (x < 1 or x > n or y < 1 or y > m or vis[x][y] or target != mp[x][y])
		return false;
	else
		return true;
}

bool bfs() {
	std::queue <std::pair <int, int>> q;
	q.push({1, 1});
	if (mp[1][1] != 's') return false;

	while (!q.empty()) {
		auto top = q.front(); q.pop();
		int x = top.first, y = top.second;

		if (vis[x][y]) continue;
		else vis[x][y] = 1;

		char next = '#';
		for (int i = 0; i < 5; ++ i) {
			if (path[i] == mp[x][y]) {
				next = path[i + 1 == 5 ? 0 : i + 1];
				break;
			}
		}

		//std::cout << "next = " << next << "\n";

		for (int i = 0; i <= 3; ++ i) {
			int nx = x + dx[i], ny = y + dx[i + 1];
			if (check(nx, ny, next)) {
				q.push({nx, ny});
			}
		}
	}

	for (int i = 1; i <= n; ++ i) {
		for (int j = 1; j <= m; ++ j) {
			// std::cout << vis[i][j] << " \n"[j == m];
		}
	}

	if (vis[n][m] == 1) return true;
	else return false;
}

signed main(){
	std::cin >> n >> m;
	for (int i = 1; i <= n; ++ i) {
		for (int j = 1; j <= m; ++ j) {
			std::cin >> mp[i][j];
		}
	}

	if(bfs()) {
		std::cout << "Yes";
	} else {
		std::cout << "No";
	}


}

E

Problem/题意

给一个数组 a,由 0、1、2 组成;给一个字符串 s,由 M、E、X 组成。

在 s 中选择 s[i] s[j] s[k] = M E X 的子序列串,求 mex(ai, aj, ak) 的和。

Thought/思路

因为 MEX 的顺序固定,因此考虑以 E 作为出发点,假设数组 a 中仅有 1,那么每个 E 的位置能贡献的答案就是 ans += M_pre * X_rep * Mex(1, 1, 1),即 前缀M的数量 × 后缀X的数量 × 1。

但是该题数组 a 中包含 0、1、2,那么只需要对 M 和 X 都多考虑 0 和 2 的情况即可,也就是多维护两个前缀 {M, 0}、{M, 2} 和两个后缀 {X, 0}、{X, 2} 。

Code/代码

#include "bits/stdc++.h"

#define int long long

int n, a[200005];
std::string s;
std::map<std::pair <int, int>, int> pre[200005];
// pre[2][{'M', 0}]:1~2之间,M 对应 a 为 0 的情况有多少种
std::map<std::pair <int, int>, int> rep[200005];

int Mex(int a, int b, int c) {
	std::bitset <4> st;
	st[a] = st[b] = st[c] = 1;
	for (int i = 0; i <= 3; ++ i) {
		if (st[i] == 0) 
			return i;
	}
	return 0;
}

signed main() {
	std::cin >> n;
	for (int i = 1; i <= n; ++ i) std::cin >> a[i];
	std::cin >> s;
	s = "#" + s;
	
	for (int i = 1; i <= n; ++ i) {
		for (auto &c : {'M', 'E', 'X'}) 
			for (int j = 0; j <= 2; ++ j) 
				pre[i][{c, j}] = pre[i - 1][{c, j}] + (c == s[i] and j == a[i]);
	}

	for (int i = n; i >= 1; -- i) {
		for (auto &c : {'M', 'E', 'X'}) 
			for (int j = 0; j <= 2; ++ j) 
				rep[i][{c, j}] = rep[i + 1][{c, j}] + (c == s[i] and j == a[i]);
	}

	int ans = 0;
	for (int i = 2; i <= n - 1; ++ i) {
		if (s[i] == 'E') {
			for (int j = 0; j <= 2; ++ j) { // M
				for (int k = 0; k <= 2; ++ k) { // X
					int mex = Mex(j, a[i], k);
					ans += mex * (pre[i - 1][{'M', j}] * rep[i + 1][{'X', k}]);
				}
			}
		}
	}

	std::cout << ans;

}

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

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

相关文章

短视频矩阵系统源代码开发搭建分享--代码开源SaaS

一、什么是短视频矩阵系统&#xff1f; 短视频矩阵系统是专门为企业号商家、普通号商家提供帐号运营从流量 到转化成交的一站式服务方案&#xff0c;具体包含&#xff1a;点赞关注评论主动私信 &#xff0c;评论区回复&#xff0c;自动潜客户挖掘&#xff0c;矩阵号营销&#x…

H3C ER G2系列路由器敏感信息泄露漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、产品介绍 H3C ER2200G2是H3C推出的新一代高性能企业级路由器&#…

【Vue】模板语法,事件处理器及综合案例、自定义组件、组件通信

一、事件处理器 我们之前事件监听可以使用v-on 指令 1、事件修饰符 在Vue中我们通过由点(.)表示的指令后缀来调用修饰符&#xff0c;比如&#xff1a; .stop&#xff1a;阻止事件冒泡。当事件触发时&#xff0c;该修饰符将停止事件进一步冒泡到父元素。相当于调用了 event.stop…

CoreData 在新建或更新托管对象中途发生错误时如何恢复如初?

问题现象 在 CoreData 支持的 App 中,当我们新建或更新托管对象到一半突然出现错误时,应该禁止任何已发生的改变被写入内存或数据库中。不过,有时仍会出现始料未及的“意外”: 从上面的演示可以看到:即使在 Item 对象新建和更新途中出现错误后不执行后续的保存操作,但界…

决策树(中):数据挖掘十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

多通道振弦数据记录仪隧道中安全监测应用方案

多通道振弦数据记录仪隧道中安全监测应用方案 近年来&#xff0c;随着城市化进程的加速推进&#xff0c;隧道建设越来越普遍。然而&#xff0c;隧道建设也带来了一系列安全问题&#xff0c;如地质灾害、水文灾害、交通事故、火灾等。因此&#xff0c;对隧道的安全监测非常重要…

20230920研发面经整理

1.cpp中的虚函数和虚函数表 C中的虚函数的作用主要是实现了多态的机制。关于多态&#xff0c;简而言之就是用父类型别的指针指向其子类的实例&#xff0c;然后通过父类的指针调用实际子类的成员函数 虚函数表是指在每个包含虚函数的类中都存在着一个函数地址的数组。当我们用…

免费好用bpm平台,实现生产管理系统

1.什么是生产管理系统 生产制造管理系统主要是以生产制造管理为核心&#xff0c;其管理功能包括产品结构设置&#xff08;BOM&#xff09;生产计划、加工、领料、质检、库存、成本核算等。通过信息化解决行业管理问题&#xff0c;满足各企业科学管理的需求&#xff0c;并为制造…

Ubuntu上线一个JAVA环境微服务架构的系统

项目背景: 项目目的: 项目架构: 配置环境: 流程: 1、系统安装 更改root密码 sudo passwd root 设置root密码123 切换用户 su root 输入root密码123 2、开启root远程ssh 编辑配置文件 vi /etc/ssh/sshd_config 更改以下行 #PermitRootLogin prohibit-passwor…

【BeanTrimUtil】通过反射去除JavaBean中String类型数据的空格:一行代码搞定整个Bean的字符串去空!

【原文地址】 https://blog.csdn.net/qq_36170500/article/details/107250282 简化不必要的代码逻辑纯原生环境亦可运行 import java.lang.reflect.Field; import java.lang.reflect.Method;/*** author zhoudeshui v1.1* Desc 版权声明&#xff1a;本文为CSDN博主「一个人的编…

公众号迁移线上公证靠谱吗?

公众号账号迁移的作用是什么&#xff1f;只能变更主体吗&#xff1f;微信公众平台的帐号迁移功能可将原公众号的粉丝、文章素材、违规记录、留言功能、名称等迁移至新的公众号。通过迁移可以实现公众号的公司主体变更、粉丝转移、开通留言功能、服务号转为订阅号等作用。因此不…

电脑剪切板在哪?4个方法教你提高效率!

“我在电脑上复制了一些图像&#xff0c;电脑显示已经保存在了剪切板&#xff0c;但是我找了好久都不知道电脑的剪切板在哪。有朋友可以指点一下吗&#xff1f;” 电脑剪切板是计算机操作中一个常用且强大的工具&#xff0c;它允许你复制、剪切和粘贴文本、图像、文件等。无论是…

期权佣金是如何收取的?成交手续费是怎么计算的?

现在期权新开户佣金1.7元/张&#xff0c;超优惠活动&#xff01; 期权佣金是默认在6元一张收取的&#xff0c;可以申请调低的&#xff0c;证券公司可以结合运营成本制定合理的期权佣金优惠费率&#xff0c;但是不同的客户&#xff0c;不同的实际情况&#xff0c;都可能会影响期…

UML六大关系总结

UML六大关系有&#xff1a;继承、关系、聚合、组合、实现、依赖。分为通过图和代码总结这些关系。 1、继承 class Bird&#xff1a;Animal { } 说明&#xff1a;一段都是子类继承父类&#xff0c;在子类的后面用一个冒号表示&#xff0c;冒号后面跟着父类的名字。继承只能继…

【前端知识】Three 学习日志(十二)—— WebGL渲染器设置(锯齿模糊)

Three 学习日志&#xff08;十二&#xff09;—— WebGL渲染器设置(锯齿模糊) 一、设置抗锯齿 const renderer new THREE.WebGLRenderer({antialias:true, });二、效果对比 设置前&#xff1a; 设置后&#xff1a; 三、查看并设置设备像素比 // 不同硬件设备的屏幕的设…

乐划锁屏推出“屏上看展”,用创意“解锁”艺术新体验

在移动互联网时代,手机不仅是重要的通讯工具,作为点亮屏幕后的“第一眼”,手机锁屏也为人们提供了更加集成、更加多元的信息接收渠道。为了满足人们的碎片化消遣需求,加速信息传播,OPPO依托锁屏点亮即触达的特点,将锁屏壁纸作为探索碎片化娱乐的新通道,推出了乐划锁屏。 在乐划…

成集云 | 用友NC集成聚水潭ERP(用友NC主管库存)| 解决方案

源系统成集云目标系统 方案介绍 用友NC是用友NC产品的全新系列&#xff0c;是面向集团企业的世界级高端管理软件。它以“全球化集团管控、行业化解决方案、全程化电子商务、平台化应用集成”的管理业务理念而设计&#xff0c;采用J2EE架构和先进开放的集团级开发平台…

VMware Esxi 7.0.3用户名密码都对,网页却无法登录问题解决

Esxi 7.0.3安装完成&#xff0c;重启之后&#xff0c;下面就是esxi的界面&#xff1a; 之后通过网页管理esxi&#xff0c;输入网址&#xff0c;出现一个问题&#xff1a; &#xff08;esxi已连接上&#xff0c;所以拿其他网段举例&#xff09;连接不上&#xff0c;无法访问此页…

MVVM模式理解

链接&#xff1a; MVVM框架理解及其原理实现 - 知乎 (zhihu.com) 重点&#xff1a; 1.将展示的界面窗口和创建的构件是数据进行分离 2.利用一个中间商进行数据的处理&#xff0c;所有的数据通过中间商进行处理

Python 数独求解器

文章目录 使用回溯算法在Python中解决数独总结 Sudoku&#xff08;数独&#xff09;是一种基于逻辑的数字填充谜题游戏&#xff0c;最受喜爱的是那些热爱逻辑和推理的人。解决数独谜题有助于提高集中注意力和逻辑思维能力。 本文介绍了如何使用Python解决数独谜题。 使用回溯算…