AtCoder Beginner Contest 375(A,B,C,D,E,F)(大模拟,前缀和,dp,离线处理,Floyd)
比赛链接
AtCoder Beginner Contest 375
A题
代码
#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5, M = 1e6 + 5;
const int inf = 0x3f3f3f3f3f3f3f3f;
int n;
char s[N];
void solve()
{cin >> n;for (int i = 1; i <= n; i++){cin >> s[i];}int ans = 0;for (int i = 1; i <= n - 2; i++){if (s[i] == '#' && s[i + 1] == '.' && s[i + 2] == '#')ans++;}cout << ans << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int test = 1;// cin >> test;for (int i = 1; i <= test; i++){solve();}return 0;
}
B题
代码
#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5, M = 1e6 + 5;
const int inf = 0x3f3f3f3f3f3f3f3f;
int n;
struct Point
{ // 点double x, y;Point() {}Point(double x, double y) : x(x), y(y) {}Point operator+(Point B) { return Point(x + B.x, y + B.y); }Point operator-(Point B) { return Point(x - B.x, y - B.y); }
} p[N];
double Distance(Point A, Point B)
{ // 两点之间的欧氏距离return sqrtl((A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y));
}
void solve()
{cin >> n;p[0] = {0, 0};for (int i = 1; i <= n; i++){cin >> p[i].x >> p[i].y;}double ans = 0;n++;for (int i = 0; i < n; i++){int j = (i + 1) % n;ans += Distance(p[i], p[j]);}cout << fixed << setprecision(8) << ans << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int test = 1;// cin >> test;for (int i = 1; i <= test; i++){solve();}return 0;
}
C题
思路
其实就是从外圈到内圈的局部旋转,注意取模,每个圈最多旋转3次。
代码
#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 3e3 + 5, M = 1e6 + 5;
const int inf = 0x3f3f3f3f3f3f3f3f;
int n;
char a[N][N], b[N][N];
void solve()
{cin >> n;for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){cin >> a[i][j];}}for (int k = 1; k <= n / 2; k++){int num = k % 4;vector<char> v[4];for (int j = k + 1; j <= n - k; j++){v[0].push_back(a[k][j]);}for (int i = k + 1; i <= n - k; i++){v[1].push_back(a[i][n - k + 1]);}for (int j = n - k; j >= k + 1; j--){v[2].push_back(a[n - k + 1][j]);}for (int i = n - k; i >= k + 1; i--){v[3].push_back(a[i][k]);}vector<char> op[4];for (int i = 0; i < 4; i++){op[(i + num) % 4] = v[i];}int idx = 0;for (int j = k + 1; j <= n - k; j++){b[k][j] = op[0][idx++];}idx = 0;for (int i = k + 1; i <= n - k; i++){b[i][n - k + 1] = op[1][idx++];}idx = 0;for (int j = n - k; j >= k + 1; j--){b[n - k + 1][j] = op[2][idx++];}idx = 0;for (int i = n - k; i >= k + 1; i--){b[i][k] = op[3][idx++];}vector<int> ji;ji.push_back(a[k][k]);ji.push_back(a[k][n - k + 1]);ji.push_back(a[n - k + 1][n - k + 1]);ji.push_back(a[n - k + 1][k]);vector<int> kk(4);for (int i = 0; i < 4; i++){kk[(i + num) % 4] = ji[i];}b[k][k] = kk[0];b[k][n - k + 1] = kk[1];b[n - k + 1][n - k + 1] = kk[2];b[n - k + 1][k] = kk[3];}for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){cout << b[i][j];}cout << endl;}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int test = 1;// cin >> test;for (int i = 1; i <= test; i++){solve();}return 0;
}
D题
思路
预处理出每一个字符的前缀和与后缀和,最后遍历一遍直接计算即可。
代码
#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5, M = 1e6 + 5;
const int inf = 0x3f3f3f3f3f3f3f3f;
int n;
int pre[N][26], nxt[N][26];
string s;
void solve()
{cin >> s;n = s.size();s = "#" + s;for (int i = 1, j = n; i <= n; i++, j--){int op1 = s[i] - 'A';int op2 = s[j] - 'A';for (int k = 0; k < 26; k++){pre[i][k] = pre[i - 1][k];nxt[j][k] = nxt[j + 1][k];}pre[i][op1]++, nxt[j][op2]++;}int ans = 0;for (int i = 2; i < n; i++){for (int k = 0; k < 26; k++){int low = pre[i - 1][k];int high = nxt[i + 1][k];ans += (low * high);}}cout << ans << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int test = 1;// cin >> test;for (int i = 1; i <= test; i++){solve();}return 0;
}
E题
思路
注意到, n n n最大为100,强度的和最大值为1500。因为有三组,所以每一组强度的和最大值为500。
我们令 d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k]表示前 i i i个已经分配完成,第 1 1 1组的强度为 j j j,第 2 2 2组的强度为 k k k时需要执行换队操作的最小数量。
状态转移方程为:
d p [ i + 1 ] [ j + b [ i + 1 ] ] [ k ] = m i n ( d p [ i + 1 ] [ j + b [ i + 1 ] ] [ k ] , d p [ i ] [ j ] [ k ] + ( a [ i + 1 ] ! = 1 ) ) dp[i + 1][j + b[i + 1]][k] = min(dp[i + 1][j + b[i + 1]][k], dp[i][j][k] + (a[i + 1] != 1)) dp[i+1][j+b[i+1]][k]=min(dp[i+1][j+b[i+1]][k],dp[i][j][k]+(a[i+1]!=1))
d p [ i + 1 ] [ j ] [ k + b [ i + 1 ] ] = m i n ( d p [ i + 1 ] [ j ] [ k + b [ i + 1 ] ] , d p [ i ] [ j ] [ k ] + ( a [ i + 1 ] ! = 2 ) ) dp[i + 1][j][k + b[i + 1]] = min(dp[i + 1][j][k + b[i + 1]], dp[i][j][k] + (a[i + 1] != 2)) dp[i+1][j][k+b[i+1]]=min(dp[i+1][j][k+b[i+1]],dp[i][j][k]+(a[i+1]!=2))
d p [ i + 1 ] [ j ] [ k ] = m i n ( d p [ i + 1 ] [ j ] [ k ] , d p [ i ] [ j ] [ k ] + ( a [ i + 1 ] ! = 3 ) ) dp[i + 1][j][k] = min(dp[i + 1][j][k], dp[i][j][k] + (a[i + 1] != 3)) dp[i+1][j][k]=min(dp[i+1][j][k],dp[i][j][k]+(a[i+1]!=3))
代码
#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e2 + 5, M = 5e2 + 5;
const int inf = 0x3f3f3f3f3f3f3f3f;
int n;
int a[N], b[N], dp[N][M][M];
void solve()
{cin >> n;int sum = 0;for (int i = 1; i <= n; i++){cin >> a[i] >> b[i];sum += b[i];}if (sum % 3 != 0){cout << -1 << endl;return;}memset(dp, inf, sizeof dp);dp[0][0][0] = 0, sum /= 3;for (int i = 0; i < n; i++){for (int j = 0; j <= sum; j++){for (int k = 0; k <= sum; k++){if (dp[i][j][k] == inf)continue;if (j + b[i + 1] <= sum)dp[i + 1][j + b[i + 1]][k] = min(dp[i + 1][j + b[i + 1]][k], dp[i][j][k] + (a[i + 1] != 1));if (k + b[i + 1] <= sum)dp[i + 1][j][k + b[i + 1]] = min(dp[i + 1][j][k + b[i + 1]], dp[i][j][k] + (a[i + 1] != 2));dp[i + 1][j][k] = min(dp[i + 1][j][k], dp[i][j][k] + (a[i + 1] != 3));}}}if (dp[n][sum][sum] == inf){cout << -1 << endl;}elsecout << dp[n][sum][sum] << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int test = 1;// cin >> test;for (int i = 1; i <= test; i++){solve();}return 0;
}
F题
思路
对于所有的查询,我们考虑倒着进行离线操作。先用 F l o y d Floyd Floyd进行一次预处理求出所有的 d i s t [ x ] [ y ] dist[x][y] dist[x][y],即点到点 y y y的最短距离。
之后根据查询的条件,不断将新的边加到图中,并根据新边用 F l o y d Floyd Floyd进行 n 2 n^2 n2的更新操作。
代码
#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 3e2 + 5, M = 1e6 + 5;
const int inf = 1e14;
int n, m, q;
int g[N][N];
struct edge
{int a, b, c;
};
vector<edge> v;
struct query
{int id, x, y;
};
vector<query> op;
void solve()
{cin >> n >> m >> q;for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){g[i][j] = inf;}}for (int i = 1, a, b, c; i <= m; i++){cin >> a >> b >> c;g[a][b] = c;g[b][a] = c;v.push_back({a, b, c});}for (int i = 1, id, x, y; i <= q; i++){cin >> id >> x;if (id == 1){int a = v[x - 1].a;int b = v[x - 1].b;int c = v[x - 1].c;g[a][b] = inf;g[b][a] = inf;}y = 0;if (id == 2)cin >> y;op.push_back({id, x, y});}for (int k = 1; k <= n; k++){for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){g[i][j] = min(g[i][j], g[i][k] + g[k][j]);}}}vector<int> ans;for (int num = q - 1; num >= 0; num--){if (op[num].id == 1){int x = op[num].x;int a = v[x - 1].a;int b = v[x - 1].b;int c = v[x - 1].c;g[a][b] = min(g[a][b], c);g[b][a] = min(g[b][a], c);for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){g[i][j] = min(g[i][j], g[i][a] + g[a][j]);}}for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){g[i][j] = min(g[i][j], g[i][b] + g[b][j]);}}}else{int x = op[num].x;int y = op[num].y;if (g[x][y] >= inf / 2)ans.push_back(-1);elseans.push_back(g[x][y]);}}reverse(ans.begin(), ans.end());for (int val : ans){cout << val << endl;}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int test = 1;// cin >> test;for (int i = 1; i <= test; i++){solve();}return 0;
}
相关文章:

AtCoder Beginner Contest 375(A,B,C,D,E,F)(大模拟,前缀和,dp,离线处理,Floyd)
比赛链接 AtCoder Beginner Contest 375 A题 代码 #pragma GCC optimize("O2") #pragma GCC optimize("O3") #include <bits/stdc.h> using namespace std; #define int long long const int N 2e5 5, M 1e6 5; const int inf 0x3f3f3f3f3f…...

认识maven
什么是 Maven? Maven 是一个开源的项目管理工具,主要用于 Java 项目的构建、依赖管理和项目生命周期管理。它提供了一种标准的项目结构和管理流程,使得开发人员能够更轻松地管理项目的构建过程,提高代码的可重用性和可维护性。 …...

OSINT技术情报精选·2024年10月第2周
OSINT技术情报精选2024年10月第2周 2024.10.16版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 1、亿欧智库:《2024中国高精定位服务产业白皮书》 报告的主要内容如下: 产业背景:在“北斗”发展态势的…...

中企通信赋能中信戴卡入选工信部颁发的2023年工业互联网试点示范名单
2024年10月17日,北京-随着工业互联网的迅猛发展,网络安全已成为国家关注的重点议题之一。日前,工业和信息化部(工信部)公布了2023年工业互联网试点示范名单,中企网络通信技术有限公司(简称“中企…...

【C语言】函数的声明与定义
函数的声明 用户自定义函数需要在main函数之前进行声明,用分号结尾。 函数的定义 用户自定义函数在main函数之后进行定义,需要写出具体形参的变量名。注意函数的返回值和返回值类型要一一对应。 函数的调用 调用时,直接使用函数名进行调用&am…...

游戏如何应对薅羊毛问题
在大众眼里,“薅羊毛”是指在电商领域,“羊毛党”利用平台、商家的促销规则,低价获取商品和服务的行为。如前不久“小天鹅被一夜薅走7000万”的案例震惊全网。 然而实际上,“薅羊毛”现象不仅存在于电商场景,在游戏中…...

Chromium html<script>对应c++接口定义
<script>:脚本元素 <script> 元素用于嵌入可执行代码或数据,这通常用作嵌入或者引用 JavaScript 代码。<script> 元素也能在其他语言中使用,比如 WebGL 的 GLSL 着色器语言和 JSON。 更多参考:<script>&…...

ollama + fastgpt+m3e本地部署
ollama fastgptm3e本地部署 开启WSL更新wsl安装ubuntu docker下载修改docker镜像源开启WSL integration 安装fastgpt先创建一个文件夹来放置一些配置文件用命令下载fastgpt配置文件用命令下载docker的部署文件 启动容器M3E下载ollama下载oneapi配置登录oneapi配置ollama渠道配…...

Linux执行source /etc/profile命令报错:权限不够问(已解决)
1.问题 明明以root账号登录Linux系统,在终端执行命令source /etc/profile时 显示权限不够 如下图: 2.问题原因 可能在编辑 /etc/profile 这个文件时不小心把开头的 井号 ‘#’ 给删除了 如图: 这里一定要有# 3.解决办法 进入/etc/pro…...

Windows 11开发全解析
Windows 11开发全解析 一、搭建开发环境 在开始Windows 11开发之前,搭建一个高效的开发环境是至关重要的。Windows 11提供了多种工具和框架,可以帮助开发者快速搭建起一个强大的开发环境。 1. Visual Studio 2024 Visual Studio 2024是微软为Windows…...
如何进行数学家式的学习思考?
如何进行数学家式的学习思考? 学生阶段的数学学习是非常重要的,对这一点很少有人质疑。一提起数学学习,一些学生、家长甚至一些教师认为,学生的数学学习往往侧重于掌握基本概念、公式和解题技巧,通过做题来巩固知识和提…...

自定义类型--结构体
目录 1. 结构体类型的声明 1.1结构的声明 1.2 结构体变量的创建和初始化 1.3不完全结构体 1.4结构的⾃引⽤ 2 结构体的内存对齐 2.1offsetof 2.2 对⻬规则 2.3 为什么存在内存对⻬? 2.4修改默认对⻬数 3. 结构体传参 4 结构体实现位段 4.1什么是位段 4.2 位段的内…...

笔试练习day7
目录 OR59 字符串中找出连续最长的数字串题目解析解法(双指针遍历)代码 NC109 岛屿数量题目解析解法代码(dfs)dfs的实现 拼三角题目解析解法(枚举)代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 &…...

python 爬虫 入门 一、基础工具
目录 一,网页开发者工具的使用 二、通过python发送请求 (一)、get (二)、带参数的get (三)、post 后续:数据解析 一,网页开发者工具的使用 我们可以用 requests 库…...

金融衍生品中的风险对冲策略分析
金融衍生品是现代金融市场中不可或缺的一部分,它们通过标的资产的价格波动为投资者提供了多样的风险管理工具。随着市场的不确定性和复杂性增加,风险对冲成为企业和个人投资者的首要任务。本文将深入探讨金融衍生品中的常见风险对冲策略,分析…...

linux下建立软链接
深度学习训练中经常会遇到数据量庞大或者工程中模型报错太多导致磁盘空间不够,但是又不想修改原来在代码中写的路径,这个时候制作软连接很有作用,把占用量大的目录移到别的空闲磁盘,然后在原来的目录做一个软连接指向那个移到的空…...

MySql数据库left join中添加子查询
user表查询出数据列表(多条,如id)左连接到order表中的order_agent_id字段,并通过 order_agent_id分组,求和user_order_partner,使用COALESCE()聚合函数对未获取到和值的进行默认赋值,防止查询不…...

redis--过期策略和内存淘汰策略
redis过期策略 1、惰性删除 当客户端尝试访问某个键时,Redis会先检查该键是否设置了过期时间,并判断是否过期。 如果键已过期,则Redis会立即将其删除。这就是惰性删除。 总结:该策略可以最大化的节省CPU资源,却对内存非…...

qt QTableview 左侧 序号 倒序
本文主要在QTableview插入数据的基础上,使左边序号实现倒序,实现如下图所示。 解决办法: QTableview左侧是QHeaderView类构成的,重写QHeaderView的paintSection, 重写序号的文字内容,进而 实现QTableview …...

隧道代理IP如何帮助企业采集数据?
在数字化时代,数据已成为企业决策的重要基石。无论是市场调研、竞品分析,还是用户行为研究,高质量的数据采集都是企业成功的关键。然而,面对复杂的网络环境和日益严格的反爬虫机制,如何高效、稳定地采集数据成为了一个…...

Spring Boot知识管理系统:技术与方法论
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…...

SpringBoot1~~~
目录 快速入门 依赖管理和自动配置 修改自动仲裁/默认版本号 starter场景启动器 自动配置 修改默认扫描包结构 修改默认配置 读取application.properties文件 按需加载原则 容器功能 Configuration Import 编辑 Conditional ImportResource 配置绑定Configur…...

兼容多家品牌手机的多协议取电快充芯片
随着智能手机的普及和功能不断的增强,电池续航能力成为了用户关注的焦点,为了解决这各问题各大手机厂商推出了手机快充技术,快充协议是快充技术的核心,每家品牌手机都有自己的独家快充协议,如FCP/SCP协议是华为手机的独…...

Java和Python的不同
1. 语法差异 Java: - Java是一种强类型语言,要求在编译时明确变量的数据类型。 - Java代码块由大括号 {} 包围,如方法体、循环和条件语句。 - Java使用分号 ; 作为语句的结束符。 public class HelloWorld {public static void main(String[] args) {S…...

Moshang摩熵医药数据库
摩熵医药数据库是摩熵数科信息公司旗下的一个核心产品,专注于为医药行业提供全面的数据支持和决策服务。该医药数据库整合了中、美、欧、日等全球七十多个主流国家的数10万数据信息源,其中收载的50亿数据体系的覆盖了生物医药全生命周期数据和精细化工全…...

基于web的酒店客房管理系统【附源码】
基于web的酒店客房管理系统(源码L文说明文档) 目录 4 系统设计 4.1 系统概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 用户信息管理 5.2 会员信息管理 5.3 客房信息管理 5.…...

潜水定位通信系统的功能和使用方法_鼎跃安全
潜水定位通信系统是保障潜水安全与作业高效的关键设备。它利用先进的声呐、无线电等技术,可精准定位潜水员位置。在水下能实现潜水员之间以及与水面的双向通信,确保信息及时传递。具备高可靠性和稳定性,即使在复杂水环境中也能正常运行。 一、…...

Golang | Leetcode Golang题解之第477题汉明距离总和
题目: 题解: func totalHammingDistance(nums []int) (ans int) {n : len(nums)for i : 0; i < 30; i {c : 0for _, val : range nums {c val >> i & 1}ans c * (n - c)}return }...

JavaWeb——Maven(1/8):整体介绍(什么是Maven、Maven的作用、小结)
目录 什么是Maven Maven的作用 依赖管理 统一项目结构 项目构建 小结 Web前端开发的知识了解完毕后,接下来要进入后端Web开发的学习,这一部分的内容是学习的重点。在这一部分内容中,首先要了解 Java 项目的构建工具 Maven。 首先先来介…...

Vivado 跟Xilinx SAE学HLS系列-高亚军(复合数据类型)
文章目录 目录 文章目录 Struct元素优化 枚举 ENUMERATED TYPE 希望能为你提供更多的创造力。 Struct元素优化 在对应的结构体变量--directive里面使用field_level或者struct_level进行优化. 4 4 4 4 4-------8 8 8 8 8 20-24; 查看波形--查看实际的分配情况 枚举 ENUMERATED …...