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如何帮助企业采集数据?
在数字化时代,数据已成为企业决策的重要基石。无论是市场调研、竞品分析,还是用户行为研究,高质量的数据采集都是企业成功的关键。然而,面对复杂的网络环境和日益严格的反爬虫机制,如何高效、稳定地采集数据成为了一个…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
 
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
 
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
 
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
 
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
