atcoder abc375

A seats

代码:

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;vector<char> a(n + 1);for(int i = 1; i <= n; i ++ ) cin >> a[i];int cnt = 0;for(int i = 1; i <= n - 2; i ++ ) {if(a[i] == '#' && a[i + 1] == '.' && a[i + 2] == '#') cnt ++;}cout << cnt;return 0;
}

B Traveling Takahashi Problem

思路:模拟,写个两点之间距离公式就可以过..

代码:

#include <bits/stdc++.h>
using namespace std;double find(double x) {double l = 0, r = 1e9;while(l < r - 1e-8) {double mid = (l + r) / 2;if(mid * mid <= x) l = mid;else r = mid; }return l;
}double calc(double x1, double y1, double x2, double y2) {return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}int main() {int n;cin >> n;vector<double> x(n + 1), y(n + 1);for(int i = 1; i <= n; i ++ ) {cin >> x[i] >> y[i];}double ans = 0;//x[0] = x[n], y[0] = y[n];for(int i = 1; i <= n; i ++ ) {ans += calc(x[i], y[i], x[i - 1], y[i - 1]);}ans += calc(x[n], y[n], 0, 0);printf("%lf", ans);return 0;
}

C Spiral Rotation

问题:

思路:图是一个正方形,不难发现,每次操作的含义是将整个图形顺时针旋转90°,并且每操作一次,操作的范围就小一圈。因此我们可以从最外面一圈开始枚举,最外面一圈只会被旋转一次,其次一圈会被旋转2次...以此类推,我们可以轻松写出对于任意点(x, y)在旋转一圈内的坐标变化,接下来要做的就是根据旋转次数n % 4后的值确定每个点的最终位置即可

代码:

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;vector<vector<char>> a((n + 1), vector<char>(n + 1)), b((n + 1), vector<char>(n + 1));for(int i = 1; i <= n; i ++ ) {for(int j = 1; j <= n; j ++ ) {cin >> a[i][j];}}auto change = [&](int type, int x, int y) {/*if(type == 0) b[x][y] = a[x][y];if(type == 1) b[x][y] = a[y][n + 1 - x];if(type == 2) b[x][y] = a[n + 1 - x][n + 1 - y];if(type == 3) b[x][y] = a[n + 1 - x][y];*/if(type == 0) b[x][y] = a[x][y];if(type == 1) b[x][y] = a[n + 1 - y][x];if(type == 2) b[x][y] = a[n + 1 - x][n + 1 - y];if(type == 3) b[x][y] = a[y][n + 1 - x];};//b = a;for(int cnt = 1; cnt <= (n + 1) / 2; cnt ++ ) {//if(cnt == 1)for(int i = cnt; i <= n - cnt + 1; i ++ ) {change(cnt % 4, cnt, i);change(cnt % 4, n - cnt + 1, i);change(cnt % 4, i, cnt);change(cnt % 4, i, n - cnt + 1);}}for(int i = 1; i <= n; i ++ ) {for(int j = 1; j <= n; j ++ ) {cout << b[i][j];}cout << "\n";}return 0;
}

思路:由于目标串长度只有3,因此此题就是个计数题, 用map来做。对于a[i], 这个点对答案的贡献就是1 ~ i - 2内所有与之相等的字符与其的坐标差之和

代码:
 

#include <bits/stdc++.h>
using namespace std;typedef long long ll;int main() {int n;string s;cin >> s;n = s.length();vector<char> a(n + 1);for(int i = 1; i <= n; i ++ ) {a[i] = s[i - 1];}map<char, ll> cnt;map<char, ll> ma;ll ans = 0;for(ll i = 1; i <= n; i ++ ) {if(cnt[a[i]] != 0) {if(a[i] != a[i - 1]) ans += (cnt[a[i]]) * (i - 1) - ma[a[i]];else if(a[i] == a[i - 1]) {ans += (cnt[a[i]] - 1) * (i - 1) - (ma[a[i]] - (i - 1));}}cnt[a[i]] ++;ma[a[i]] += i;}cout << ans;return 0;
}

E 3 team division

思路:简单dp。首先可以很容易想到一个dp:

dp[i][j][k][u]表示从前i个人中选择并且队伍1的力量为j,队伍2的力量为k,队伍3的力量为u的代价的最小值。由于i是小于100的,且\sum{b_i} <= 1500因此jku的范围不超过500。这个dp数组肯定是爆内存的,可以通过滚动数组优化掉第一维,也可以优化掉最后一维,因为当我们知道了两个组的sum,第三个组的sum也就显而易见了, 现在考虑状态转移,在转移时,如果要把第i个人加入队伍x,只要判断这个人本身是否处于这个队伍中即可,如果处于这个队伍中,那么代价是0,反之代价则是1.可以用 !(a[i] == x)表示代价

代码:
 

#include <bits/stdc++.h>
using namespace std;int dp[110][510][510];int main() {int n;cin >> n;int sum = 0;vector<int> a(n + 1), b(n + 1), s(n + 1);for(int i = 1; i <= n; i ++ ) {cin >> a[i] >> b[i];sum += b[i];s[i] = s[i - 1] + a[i];}if(sum % 3) {cout << -1;return 0;}memset(dp, 0x3f, sizeof dp);dp[0][0][0] = 0;for(int i = 1; i <= n; i ++ ) {for(int j = 0; j <= 500; j ++ ) {for(int k = 0; k <= 500; k ++ ) {if(j - b[i] >= 0) dp[i][j][k] = min(dp[i][j][k], dp[i - 1][j - b[i]][k] + !(a[i] == 1));if(k - b[i] >= 0) dp[i][j][k] = min(dp[i][j][k], dp[i - 1][j][k - b[i]] + !(a[i] == 2));if(s[i] - j - k <= 500) dp[i][j][k] = min(dp[i][j][k], dp[i - 1][j][k] + !(a[i] == 3));}}}if(dp[n][sum / 3][sum / 3] == 0x3f3f3f3f) cout << -1;else cout << dp[n][sum / 3][sum / 3];return 0;
}

F

首先多个询问,且n很小,确定求最短路算法floyd

并且删边不是很好操作,那么就倒着来,把删边改成加边。加边可以在o(n2)的时间复杂度内完成对floyd的更新

代码:
 

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
const ll inf = 1e18;int main() {ll n, m, q;cin >> n >> m >> q;vector<pair<ll, ll>> way(m + 1);vector<ll> len(m + 1);for(ll i = 1; i <= m; i ++ ) {ll a, b, c;cin >> a >> b >> c;way[i] = {a, b};len[i] = c;}map<ll, ll> ma;vector<vector<ll>> stk(q + 1);for(ll i = 1; i <= q; i ++ ) {ll op;cin >> op;if(op == 1) {ll id;cin >> id;stk[i].push_back(op);stk[i].push_back(id);ma[id] ++;} else {ll x, y;cin >> x >> y;stk[i].push_back(op);stk[i].push_back(x);stk[i].push_back(y);}}vector<vector<ll>> f((n + 1), vector<ll>(n + 1, inf));for(ll i = 1; i <= n; i ++ ) f[i][i] = 0;for(ll i = 1; i <= m; i ++ ) {if(!ma[i]) {//cout << i << " " << "";ll a = way[i].first, b = way[i].second;f[a][b] = len[i];f[b][a] = len[i];}}for(ll k = 1; k <= n; k ++ ) {for(ll i = 1; i <= n; i ++ ) {for(ll j = 1; j <= n; j ++ ) {f[i][j] = min(f[i][j], f[i][k] + f[j][k]);}}}//cout << f[1][3] << " " << "\n";stack<ll> ans;for(ll i = q; i >= 1; i -- ) {auto t = stk[i];if(t[0] == 1) {ll a = way[t[1]].first;ll b = way[t[1]].second;//if(i == q - 1) cout << a << " " << b << endl;f[a][b] = min(f[a][b], len[t[1]]);f[b][a] = min(f[b][a], len[t[1]]);// cout << f[2][3] << " ";for(ll i = 1; i <= n; i ++ ) {for(ll j = 1; j <= n; j ++ ) {f[i][j] = min(f[i][j], f[i][a] + f[b][j] + f[a][b]);f[i][j] = min(f[i][j], f[i][b] + f[a][j] + f[a][b]);f[j][i] = f[i][j];}}} else {//if(i == q) cout << f[t[1]][t[2]] << " ";if(f[t[1]][t[2]] == inf) ans.push(-1);else ans.push(f[t[1]][t[2]]);}}while(ans.size()) {cout << ans.top() << "\n";ans.pop();}return 0;
}

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

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

相关文章

【spring ai】java 实现RAG检索增强,超快速入门

rag 需求产生的背景介绍&#xff1a; 在使用大模型时&#xff0c;一个常见的问题是模型会产生幻觉&#xff08;即生成的内容与事实不符&#xff09;&#xff0c;同时由于缺乏企业内部数据的支持&#xff0c;导致其回答往往不够精准和具体&#xff0c;偏向于泛泛而谈。这些问题…

STM32 实现 TCP 服务器与多个设备通信

目录 一、引言 二、硬件准备 三、软件准备 四、LWIP 协议栈的配置与初始化 五、创建 TCP 服务器 1.创建 TCP 控制块 2.绑定端口 3. 进入监听状态 4.设置接收回调函数 六、处理多个客户端连接 七、数据处理与通信管理 八、错误处理与资源管理 九、总结 一、引…

【C++】:工厂模式

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 简单工厂模什么是简单工厂模式&#xff1f;如何实现简单工厂模式&#xff1f; 工厂方法抽象工厂模式总结简单工厂模式工厂方法抽象工厂「Abstract Factory」 简单工厂模 什么是简单工厂模式&#xf…

ps提示不能使用移动工具,因为目标通道被隐藏的解决办法

解决&#xff1a;按F7&#xff0c;或者从窗口把图层打开 按图示找到快速蒙版图层。它可能被隐藏或以特殊图标显示。右键删除或者拖到右下角垃圾桶里

小猿口算炸鱼脚本

目录 写在前面&#xff1a; 一、关于小猿口算&#xff1a; 二、代码逻辑 1.数字识别 2.答题部分 三、代码分享&#xff1a; 补充&#xff1a;软件包下载 写在前面&#xff1a; 最近小猿口算已经被不少大学生攻占&#xff0c;小学生直呼有挂。原本是以为大学生都打着本…

从融资烧钱到商业落地:中国AI大模型步入「实战期」

在AI还尚且未达到生产力工具的时候&#xff0c;没人能知道怎样的基础模型会是尽头&#xff0c;以及对付费客户而言&#xff0c;他们如何才能将这笔投入转化为真实营收。 而对于大模型究竟什么能盈利&#xff0c;目前国内的任何一家都未表过态。或者说&#xff0c;这不是一个当…

从0开始深度学习(11)——多层感知机

前面介绍了线性神经网络&#xff0c;但是线性模型是有可能出错的&#xff0c;因为线性模型意味着是单调假设&#xff0c;但是现实中往往很复杂。例如&#xff0c;我们想要根据体温预测死亡率。 对体温高于37摄氏度的人来说&#xff0c;温度越高风险越大。 然而&#xff0c;对体…

MySQL插入优化-性能对比

插入优化主要包括&#xff1a; 批量插入条数据&#xff0c;而不是单个记录逐条插入。手动提交事务&#xff0c;避免自动提交事务带来的额外开销。使用load命令从本地文件导入。 性能对比 创建数据库表 CREATE TABLE if not exists tb_sku ( id int(20) …

facefusion,使用CPU实现一键图片、视频换脸,无需显卡,无限时长(附下载即用的整合包)

FaceFusion 是一种利用人工智能技术将两张或多张人脸融合在一起的图像处理技术。这种技术通过面部特征的识别和重构&#xff0c;将不同的人脸混合成一张新的脸&#xff0c;生成的图像看起来像是这些人脸的融合体。 FaceFusion使用深度学习算法&#xff0c;来捕捉人脸的细节和特…

OpenCV答题卡识别

文章目录 一、基本流程二、代码实现1.定义函数2.图像预处理&#xff08;1&#xff09;高斯模糊、边缘检测&#xff08;2&#xff09;轮廓检测&#xff08;3&#xff09;透视变换&#xff08;4&#xff09;阈值处理和轮廓检测 3.筛选和排序选项轮廓4.判断答案5.显示结果 三、总结…

YOLOv11改进有效系列目录 - 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制 - 针对多尺度、小目标、遮挡、恶劣天气等问题

目标检测作为计算机视觉领域的一项核心任务&#xff0c;极大地推动了整个领域的发展。它不仅是其他许多视觉任务的基础工具&#xff0c;还在学术研究和实际应用之间架起了一座桥梁。目标检测的主要任务是识别和定位图像或视频中的特定对象&#xff0c;通常需要模型能同时处理多…

C++ | Leetcode C++题解之第476题数字的补数

题目&#xff1a; 题解&#xff1a; class Solution { public:int findComplement(int num) {int highbit 0;for (int i 1; i < 30; i) {if (num > (1 << i)) {highbit i;}else {break;} }int mask (highbit 30 ? 0x7fffffff : (1 << (hig…

【DBA Part01】国产Linux上安装Oracle进行数据迁移

内容如下&#xff1a; 1.1.生产环境RHEL/OEL Linux8Oracle11gR2安装配置 1.2.国产麒麟操作系统Oracle11gR2安装配置 1.3.国产麒麟操作系统Oracle11gR2 RAC集群安装配置 1.4.Oracle11gR2迁移到国产麒麟操作系统&#xff08;单机/RAC&#xff09; 本阶段课程项目需求说明&am…

零一万物 Yi-Lightning:超越 GPT-4o 冲击全球榜单;阿里国际 Marco 翻译大模型发布丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 …

CEEMDAN +组合预测模型(Transformer - BiLSTM + ARIMA)

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享&#xff01; EMD、EEMD、FEEMD、CEEMD、CEEMDAN的区别、原理和Python实现&#xff08;一&#xff09;EMD-CSDN博客 EMD、EEM…

具备技术二:正则表达式

一、C正则库 regex 用于报文的解析。 使用接口&#xff1a;bool regex_match(const string &src, smatch &matches, regex &e); src&#xff1a;要解释的字符串。 smatch&#xff1a;一个类似于数组的结构&#xff0c;用于存储一个个解释之后的字符串。 matche…

鸿蒙网络编程系列3-TCP客户端通讯示例

1. TCP简介 TCP协议是传输层最重要的协议&#xff0c;提供了可靠、有序的数据传输&#xff0c;是多个广泛使用的表示层协议的运行基础&#xff0c;相对于UDP来说&#xff0c;TCP需要经过三次握手后才能建立连接&#xff0c;建立连接后才能进行数据传输&#xff0c;所以效率差了…

Android -- [SelfView] 多动画效果图片播放器

Android – [SelfView] 多动画效果图片播放器 效果&#xff08;录制的有点卡&#xff09; 1. 引用&#xff1a; <com.nepalese.virgolib.widget.image.BaseImageViewandroid:id"id/base_image"android:layout_width"match_parent"android:layout_heigh…

AD画图的使用

一、新建工程 二、绘制原理图 1、原理图搜索方法&#xff1a; https://www.ti.com/lit/ds/symlink/tlv1117.pdf?ts1729143086540&ref_urlhttps%253A%252F%252Fwww.mouser.tw%252F www.alldatasheet.com 2、绘图步骤&#xff1a; 注&#xff1a;管脚四点朝外

2024软考网络工程师笔记 - 第5章.无线通信网

文章目录 移动通信与 5G1️⃣移动通信2️⃣移动通信制式3️⃣5G 应用场景与关键技术 &#x1f551;WLAN 通信技术1️⃣WLAN 通信技术 &#x1f552;WLAN 频谱与信道&#xff08;高频考点&#xff09;1️⃣WLAN 网络分类2️⃣ISM频段3️⃣不重叠信道&#xff08;重点&#xff09…