Atcoder ABC383

C

BFS。放入所有的H点,bfs在D步内能访问到的点。

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;int h, w, d;
string s[1100];
int a[1100][1100];
queue<pii> qu;int dirs[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}
};int main(){//freopen("in.txt", "r", stdin);cin >> h >> w >> d;for (int i = 0; i < h; ++i) {cin >> s[i];}memset(a, 0x3f, sizeof(a));for (int i = 0; i < h; ++i) {for (int j = 0; j < w; ++j) {if (s[i][j] == 'H') {a[i][j] = 0;qu.push({ i, j });}}}while (qu.size()) {auto [r, c] = qu.front();int step = a[r][c];if (step == d) {break;}qu.pop();for (auto [dr, dc] : dirs) {int nr = dr + r, nc = dc + c;if (nr >= 0 && nr < h && nc >= 0 && nc < w && s[nr][nc] == '.') {if (a[nr][nc] > step + 1) {qu.push({ nr, nc });a[nr][nc] = step + 1;}}}}int ans = 0;for (int i = 0; i < h; ++i) {for (int j = 0; j < w; ++j) {if (a[i][j] <= d) ans++;}}printf("%d\n", ans);return 0;
}

D

简单数论题。
有9个因子,说明该数能写成为 a 2 ∗ b 2 a^2*b^2 a2b2的形式或者 a 8 a^8 a8的形式。这里ab都为质数。
因此我们先做出2000000以内的质数表,然后前者暴力或者求前缀和都可以,后者直接暴力。做的时候小心越界。因此我很不要脸的用了python。

# -*- coding: utf-8 -*-
# @time     : 2023/6/2 13:30
# @file     : atcoder.py
# @software : PyCharmimport bisect
import copy
import sys
from itertools import permutations
from collections import defaultdict, Counter, deque
from functools import lru_cache, cmp_to_key
import heapq
import math
sys.setrecursionlimit(100010)def main():items = sys.version.split()fp = open("in.txt") if items[0] == "3.10.6" else sys.stdinn = int(fp.readline())N = 2000001b = [0] * Nprime = []sz = 0for i in range(2, N):if b[i] == 0:prime.append(i)sz += 1for j in range(sz):if i * prime[j] >= N:breakb[i * prime[j]] = 1if i % prime[j] == 0:breakans = 0for i in range(sz):for j in range(i + 1, sz):if (prime[i] ** 2) * (prime[j] ** 2) > n:breakans += 1for i in range(sz):t = prime[i] ** 8if t > n:breakans += 1print(ans)if __name__ == "__main__":main()

E

这种N的排列求最佳匹配已经没有什么算法复杂度可言,关键是找到一种方法去贪心。
考虑类似kruscal求最小生成树的做法,对边排序,从小到大加入。实际上,当点对在同一颗最小生成子树中时,点对的f值就是最小生成树当前遍历的边w。

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;int n, m, k;
struct Edge {ll w;int u, v;
} e[200020];int fa[200020];
int dep[200020];
int cnta[200020], cntb[200020];int get(int u) {return u == fa[u] ? u : fa[u] = get(fa[u]);
}int merge(int u, int v) {int fu = get(u), fv = get(v);if (fu == fv) return fu;if (dep[fu] < dep[fv]) swap(fu, fv);cnta[fu] += cnta[fv];cntb[fu] += cntb[fv];fa[fv] = fu;if (dep[fu] == dep[fv]) dep[fu] ++;return fu;
}int main(){//freopen("in.txt", "r", stdin);cin >> n >> m >> k;for (int i = 0; i < m; ++i) {int u, v;ll w;cin >> u >> v >> w;e[i] = { w, u, v };}for (int i = 0; i < k; ++i) {int u;cin >> u;cnta[u] ++;}for (int i = 0; i < k; ++i) {int u;cin >> u;cntb[u] ++;}sort(e, e + m, [&](Edge x, Edge y) {return x.w < y.w;});for (int i = 1; i <= n; ++i) {fa[i] = i, dep[i] = 0;}ll ans = 0;for (int i = 0; i < m; ++i) {auto [w, u, v] = e[i];int f = merge(u, v);int mn = min(cnta[f], cntb[f]);ll t = w * mn;cnta[f] -= mn, cntb[f] -= mn;ans += t;}printf("%lld\n", ans);return 0;
}

F

分组背包,将同一个颜色归为一组,然后对每一组开一个背包计算在这一组上面容量为j时能获得的最大分数。
g ( i , j ) g(i,j) g(i,j)是第i组运行完后容量为j时的最大分数。
当前背包的容量为p,分数为u
f ( i , j ) = min ⁡ ( g ( i − 1 , j − p ) + u + k , f ( i , j − p ) + u ) f(i,j)=\min(g(i-1,j-p) + u + k,f(i,j-p)+u) f(i,j)=min(g(i1,jp)+u+k,f(i,jp)+u)
最后再将f更新到g

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;ll f[50001], nx[50001];
const ll INF = 1ll << 60;
int n, x;
ll k;
vector<pii> a[505];int main(){//freopen("in.txt", "r", stdin);cin >> n >> x >> k;for (int i = 1; i <= n; ++i) {int p, u, c;cin >> p >> u >> c;a[c].push_back({ p, u });}for (int i = 1; i <= x; ++i) f[i] = -INF;for (int i = 1; i <= n; ++i) {for (int j = 0; j <= x; ++j)nx[j] = -INF;for (auto [p, u] : a[i]) {for (int j = x; j >= p; --j) {ll temp = -INF;if (f[j - p] >= 0) {temp = max(temp, f[j - p] + u + k);}if (nx[j - p] >= 0) {temp = max(temp, nx[j - p] + u);}nx[j] = max(nx[j], temp);}}for (int j = 0; j <= x; ++j) {f[j] = max(f[j], nx[j]);}}ll ans = 0;for (int i = 0; i <= x; ++i) {ans = max(ans, f[i]);}printf("%lld\n", ans);return 0;
}

G

这一期的G题有点难度,dp使用闵可夫斯基和优化。

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

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

相关文章

Xcode模拟器运行报错:The request was denied by service delegate

Xcode模拟器运行报错&#xff1a;The request was denied by service delegate 造成的原因: &#xff08;1&#xff09;新的苹果M系列芯片的Mac电脑 &#xff08;2&#xff09;此电脑首次安装启动Xcode的应用程序 &#xff08;3&#xff09;此电脑未安装Rosetta 2 解决方法: …

SQL项目实战与综合应用——项目设计与需求分析

项目设计与需求分析是软件开发过程中的核心环节&#xff0c;尤其在涉及数据库的应用时&#xff0c;良好的设计将直接影响到项目的可扩展性、性能和维护性。本文将深入探讨数据库设计的最佳实践&#xff0c;结合 C 与 SQL 的实际应用场景&#xff0c;涵盖项目需求收集、数据库设…

Python+OpenCV系列:图像的位运算

文章目录 引言 1. 位运算简介2. OpenCV 中的位运算2.1 按位与运算&#xff1a;cv2.bitwise_and()2.2 按位或运算&#xff1a;cv2.bitwise_or()2.3 按位异或运算&#xff1a;cv2.bitwise_xor()2.4 按位取反运算&#xff1a;cv2.bitwise_not() 3. 位运算在图像处理中的应用3.1 图…

高效的 Python Web 开发与数据库操作:基于 FastAPI 的实战与优化

高效的 Python Web 开发与数据库操作&#xff1a;基于 FastAPI 的实战与优化 目录 &#x1f40d; 1. 数据库连接池的使用与管理&#x1f504; 2. 数据库事务的处理与控制&#x1f4a1; 3. FastAPI 中的 ORM 集成与优化 &#x1f40d; 1. 数据库连接池的使用与管理 数据库连接…

D3实现站点路线图demo分享

分享一下通过D3实现的站点路线分布图&#xff0c;这是一个demo。效果图如下&#xff1a; 源码如下&#xff1a; <template><div class"map-test" ref"d3Chart"><div class"tooltip" id"popup-element"><span>…

CTF-WEB: 配置一个Ubuntu 多版本php服务器

今天复现题windows的php /tmp缓存一直是空的,直接配一个新虚拟机 开始 准备一个全新的虚拟机,可以在这里下载镜像 Verifying - USTC Mirrors 走完常规安装流程继续 设置中文(可选) sudo apt install language-pack-zh-hans language-pack-gnome-zh-hans然后在设置->语…

python爬虫--小白篇【爬虫实践】

一、前言 1.1、王者荣耀皮肤爬虫 根据王者荣耀链接&#xff0c;将王者荣耀的全部英雄的全部皮肤图片爬取保存到本地。经过分析得到任务的三个步骤&#xff1a; 根据首页全部英雄列表连接获取全部英雄的名称hero_name以及对应的hero_id&#xff1b;根据单个英雄的hero_name和h…

算法日记 42 day 图论

今天来看看广度优先搜索&#xff0c;并且写几个题。刷到这里我才想起来&#xff0c;当时第一次面试的时候问的就是这个题&#xff0c;当时大概知道一点思路&#xff0c;但不清楚是图论方面的&#xff0c;更别说写出来了。 广度优先搜索&#xff08;BFS&#xff09; 不同于深度…

【NLP 13、实践 ② 判断文本中是否有特定字符出现】

人活着就是为了救赎自己&#xff1b;为了经历世间的美好&#xff1b;为了在挫折中成长变得更坚强 —— 24.12.10 一、定义模型 1.嵌入层 nn.Embedding&#xff1a;将离散值转化为向量 # embedding层&#xff0c;vocab&#xff1a;词表&#xff0c;要多少个数据&#xff08;向…

软件注册机 | QT给自己的桌面软件实现软件注册码功能

之前做的一个项目&#xff0c;想要给软件做一个注册码功能。当软件发布之后&#xff0c;不想给所有人用&#xff0c;这时就可以通过注册机给软件生成授权码来软件加密。整个过程实现分为两大步骤&#xff0c;一是在自己的软件打开时&#xff0c;增加一段判断逻辑&#xff1b;二…

GD32中断

1.什么是中断&#xff1a;打断现在正在做的事&#xff0c;去执行其他事。 2.ARM异常中断结构 3.中断向量编号。中断向量是 进行了映射的&#xff0c;直接映射到 flash中的地址。 4.中断执行结构。向量里面保存的是执行函数的地址。&#xff08;具体可在编译完后的map文件中查看…

三菱FX3U模拟量产品的介绍

FX3u可编程控制器模拟量产品包括&#xff1a;特殊适配器、特殊功能模块的连接 1、连接在FX3U可编程控制器的左侧。 2、连接特殊适配器时&#xff0c;需要功能扩展板。 3、最多可以连接4台模拟量特殊适配器。 4、使用高速输入输出特殊适配器时&#xff0c;请将模拟量特殊适配器连…

WHAT - webpack、vite(rollup)、rsbuild 对比

目录 一、分析二、其他阅读 一、分析 以下是 Webpack、Vite 和 rsbuild 在多个维度上的比较分析表格&#xff1a; 维度WebpackVitersbuild核心语言/技术使用 JavaScript 和 Node.js基于 JavaScript/TypeScript&#xff0c;依赖原生 ESM 和浏览器支持使用 Rust 编写&#xff0…

软件测试丨Appium 源码分析与定制

在本文中&#xff0c;我们将深入Appium的源码&#xff0c;探索它的底层架构、定制化使用方法和给软件测试带来的优势。我们将详细介绍这些技术如何解决实际问题&#xff0c;并与大家分享一些实用的案例&#xff0c;以帮助读者更好地理解和应用这一技术。 Appium简介 什么是App…

【PlantUML系列】流程图(四)

目录 目录 一、基础用法 1.1 开始和结束 1.2 操作步骤 1.3 条件判断 1.4 并行处理 1.5 循环 1.6 分区 1.7 泳道 一、基础用法 1.1 开始和结束 开始一般使用start关键字&#xff1b;结束一般使用stop/end关键字。基础用法包括&#xff1a; start ... stopstart ...…

Linux 串口编程

目录 前言一、tty体系二、串口硬件基础知识三、Linux下的串口编程3.1 打开串口3.2 从串口读写数据,问题1、2的诞生3.3 关闭串口3.4 串口配置3.4.1 获取/设置串口的参数3.4.2 设置波特率3.4.3 设置控制模式标志3.4.4 设置本地模式标志3.4.5 设置输入模式标志3.4.6 设置输出模式标…

️【设计模式】之单例模式详解:创建者模式中的一颗“明珠”

全文目录&#xff1a; 开篇语&#x1f3af; 什么是单例模式&#xff1f;&#x1f5c2;️ 单例模式的关键特性&#x1f511; 单例模式的实现方式1. &#x1f331; 懒汉式单例&#xff08;Lazy Initialization&#xff09;2. &#x1f512; 懒汉式单例&#xff08;线程安全版&…

idea压缩js,css

这是需要的jar包(文章顶部也可以下载) 地址:https://download.csdn.net/download/yuzheh521/90109966?spm1001.2101.3001.9500 压缩js arguments: -jar E:\swj\jar_packages\css_js_compress\yuicompressor-2.4.8.jar --type js --charset utf-8 $FilePath$ -o $FileNameWith…

ASP.NET |日常开发中连接Oracle数据库详解

ASP.NET &#xff5c;日常开发中连接Oracle数据库详解 前言一、安装和配置 Oracle 数据访问组件1.1 安装ODP.NET&#xff08;Oracle Data Provider for.NET&#xff09;&#xff1a;1.2 引用相关程序集&#xff1a; 二、配置连接字符串2.1 连接字符串的基本组成部分&#xff1a…

【linux系统】基础开发工具(yum、Vim)

1. 软件包管理器 1.1 什么是软件包 在Linux下安装软件, ⼀个通常的办法是下载到程序的源代码, 并进⾏编译, 得到可执⾏程序. 但是这样太麻烦了, 于是有些⼈把⼀些常⽤的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在⼀个服务器上, 通过包管理器可以很⽅便的…