当前位置: 首页 > article >正文

AtCoder Beginner Contest 403

再来一场atCoder,这一场简直血虐,让你回忆起了审题的重要性

A - Odd Position Sum 

思路:题意很简单,求一个数组奇数位上数字和。很简单的问题,但你如果不仔细审题,就会浪费大量的时间

/*
Author Owen_Q
*/
#include <bits/stdc++.h>using namespace std;int main() {ios_base::sync_with_stdio(false), cin.tie(nullptr);int n;cin >> n;int oddSum = 0;for (int i = 0; i < n; i++) {int a;cin >> a;if (i % 2 == 0) {oddSum += a;}}cout << oddSum << '\n';return 0;
}

B - Four Hidden 

思路:第二题,简单的字符串子串题,暴力匹配一下即可

/*
Author Owen_Q
*/
#include <bits/stdc++.h>using namespace std;bool streamContains(string t, string u, int startT) {bool yes = true;int uLen = int(u.size());for (int i = 0; yes && i < uLen; i++) {if (u[i] != t[i + startT] && t[i + startT] != '?') {yes = false;;}}return yes;
}int main() {ios_base::sync_with_stdio(false), cin.tie(nullptr);string t, u;cin >> t >> u;int tLen = int(t.size());int uLen = int(u.size());for (int i = 0; i + uLen <= tLen; i++) {if (streamContains(t, u, i)) {cout << "Yes" << '\n';return 0;}}cout << "No" << '\n';return 0;
}

C - 403 Forbidden 

思路:又是熟悉的模拟,与上次的模拟登录类似,这次换成了模拟授权。没什么难度,但却因为没读清题目,要求输出Yes/No,结果输出了YES/NO,导致了三次无意义的WA,实属可惜

/*
Author Owen_Q
*/
#include <bits/stdc++.h>using namespace std;const int N = 2e5 + 5;set<int> g[N];
bool all[N];int main() {ios_base::sync_with_stdio(false), cin.tie(nullptr);int n, m, q;cin >> n >> m >> q;while (q--) {int o, x, y;cin >> o;if (o == 1) {cin >> x >> y;g[x].insert(y);} else if (o == 2) {cin >> x;all[x] = true;} else {cin >> x >> y;if (all[x] || g[x].contains(y)) {cout << "Yes" << endl;} else {cout << "No" << endl;}}}return 0;
}

D - Forbidden Difference 

思路:给定一个数组a(2e5的数据量,最大值为1e6)和一个特定的数d,要求删除最少得数量是的数组内所有数的距离都不为d

题意倒是很简单,首先想到的将距离为d的数通过并查集连接,再通过遍历每一个连通集,进行间隔删除,最后找出最小的删除方案。

第一次提交出现了部分re,显然,并查集记得初始化,这个也算是一个坑点了

注意特判一下d为0的场景

发现问题了间隔删除并非是最优策略,看来还是要用dp来做。

最后整理一下,其实并查集的主要就是为了优化连通集,但是这题的数组最大值只有1e6,因此可以直接用计数数组而放弃并查集优化,这样会使代码简洁一些。

整体的dp方案,当然是根据数组内的值是否去除来进行转移。由于要去除最小值,我们完全可以转换为保留的最大值进行转移,最终用总和进行相减即可。

不难发现,连通数组的数量最大即为特定间隔数 d,于是遍历每一个连通集,将每个连通数组中的dp最大值进行求和,即为最终要保留的最大值。

那么dp转移方程就出来了,假设当前要判断的数为k,当前数总计出现了 cnt[k] 次

那么 dp[k][1] 表示当前数要保留,那面,前一个数一定不能保留,于是 dp[k][1] = dp[k-d][0] + cnt[k]

而 dp[k][0] 表示当前数要去除,则前一个数保留与否均可,取个最大值即可,即 dp[k][0] = max(dp[k-d][0],dp[k-d][1])

接下来看一下代码,我将原始求解写在了 first_pass_function() 函数中,将整理后的简易方法写在了 main() 函数中

/*
Author Owen_Q
*/
#include <bits/stdc++.h>using namespace std;const int N = 2e5 + 5;
const int M = 1e6 + 1;int a[N];
int pre[M];
bool in[M];
int cnt[M];
set<int> col[M];
set<int> colSet;
// bool re[N];
int dp[M][2];int findX(int x) {if (pre[x] == x) {return x;}return pre[x] = findX(pre[x]);
}void unionXY(int x, int y) {int preX = findX(x);int preY = findX(y);if (preX > preY) {pre[x] = preY;} else if (preX < preY) {pre[y] = preX;}
}int first_pass_function() {ios_base::sync_with_stdio(false), cin.tie(nullptr);int n, d;cin >> n >> d;int rere = 0;// 初始化for (int i = 0; i < M; i++) {pre[i] = i;in[i] = false;cnt[i] = 0;col[i].clear();}colSet.clear();for (int i = 1; i <= n; i++) {cin >> a[i];cnt[a[i]]++;in[a[i]] = true;if (cnt[a[i]] == 1) {if (a[i] - d >= 0 && in[a[i] - d]) {unionXY(a[i], a[i] - d);}if (a[i] + d < M && in[a[i] + d]) {unionXY(a[i], a[i] + d);}}}for (int i = 1; i <= n; i++) {int preA = findX(a[i]);col[preA].insert(a[i]);colSet.insert(preA);}for (auto colSetIt = colSet.begin(); colSetIt != colSet.end(); ++colSetIt) {int curPre = *colSetIt;int colSize = col[curPre].size();int colCnt = 0;// bool colStart = true;int colStartCnt = 0;memset(dp, 0, sizeof(dp));int nowPos = 1;for (auto colPreIt = col[curPre].begin(); colPreIt != col[curPre].end(); ++colPreIt) {int now = *colPreIt;// cout << now << "**" << endl;// 以下为间隔删除,该方法不正确,更换为dp// if (colStart) {//     colStart = false;// } else {//     colStart = true;// }// if (colStart) {//     colStartCnt += cnt[now];// }colCnt += cnt[now];dp[nowPos][1] = dp[nowPos-1][0] + cnt[now];dp[nowPos][0] = max(dp[nowPos-1][0], dp[nowPos-1][1]);nowPos ++;}colStartCnt = max(dp[colSize][0], dp[colSize][1]);// cout << colCnt << "*"  << colStartCnt <<  "\n";// 特判逻辑if (d == 0) {rere += colCnt - 1;} else if (colStartCnt > colCnt / 2) {rere += colCnt - colStartCnt;// colStart = true;} else {rere += colStartCnt;// colStart = false;}// cout << rere << "***" << endl;// colStartPre = -1;// for (auto colPreIt = col[curPre].begin(); colPreIt != col[curPre].end(); ++colPreIt) {//     int now = *colPreIt;//     if (now != colStartPre) {//         colStartPre = now;//         if (colStart) {//             colStart = false;//         } else {//             colStart = true;//         }//     }//     if (colStart) {//         re[now] = true;//     }// }}// int reDelCnt = 0;// for (int i = 1; i <= n; i++) {//     if (!re[a[i]]) {//        reDelCnt++;//     }// }cout << rere << endl;return 0;
}int main() {ios_base::sync_with_stdio(false), cin.tie(nullptr);int n, d;cin >> n >> d;// 初始化memset(cnt, 0, sizeof(cnt));// memset(dp, 0, sizeof(dp));int difCnt = 0;int maxA = 0;for (int i = 1; i <= n; i++) {int A;cin >> A;cnt[A]++;if (cnt[A] == 1) {difCnt++;maxA = max(maxA, A);}}if (d == 0) {cout << n - difCnt << endl;} else {int maxRe = 0;for (int i = 0; i < d; i++) {// 第一轮dp初始化dp[i][1] = cnt[i];dp[i][0] = 0;int curRe = cnt[i];for (int j = i+d; j <= maxA; j+=d) {// 后续dp转移dp[j][1] = dp[j-d][0] + cnt[j];dp[j][0] = curRe;curRe = max(dp[j][0], dp[j][1]);}maxRe += curRe;}cout << n - maxRe << endl;}
}

相关文章:

AtCoder Beginner Contest 403

再来一场atCoder&#xff0c;这一场简直血虐&#xff0c;让你回忆起了审题的重要性 A - Odd Position Sum 思路&#xff1a;题意很简单&#xff0c;求一个数组奇数位上数字和。很简单的问题&#xff0c;但你如果不仔细审题&#xff0c;就会浪费大量的时间 /* Author Owen_Q…...

关于 Golang GC 机制的一些细节:什么是根对象?GC 机制的触发时机?

文章目录 关于 Golang GC 机制的一些细节&#xff1a;什么是根对象&#xff1f;GC 机制的触发时机&#xff1f;简要回顾 Golang GC 三色标记法的工作流程什么是根对象&#xff1f;GC 的触发时机&#xff1f; 关于 Golang GC 机制的一些细节&#xff1a;什么是根对象&#xff1f…...

Python笔记:c++内嵌python,c++主窗口如何传递给脚本中的QDialog,使用的是pybind11

1. 问题描述 用的是python 3.8.20, qt版本使用的是5.15.2, PySide的版本是5.15.2, pybind11的版本为2.13.6 网上说在python脚本中直接用PySide2自带的QWinWidget&#xff0c;如from PySide2.QtWinExtras import QWinWidget&#xff0c;但我用的版本中说没有QWinWidget&#x…...

在Ubuntu24.04中配置开源直线特征提取软件DeepLSD

在Ubuntu24.04中配置开源直线特征提取软件DeepLSD 本文提供在Ubuntu24.04中配置开源直线特征提取软件DeepLSD的基础环境配置、列出需要修改的文件内容&#xff0c;以及报错解决方案集锦。 基础的编译安装环境 python3.8.12CUDA12gcc/g 9.5&#xff08;系统自带的g-13版本太新…...

C++效率掌握之STL库:map set底层剖析及迭代器万字详解

文章目录 1.map、set的基本结构2.map、set模拟实现2.1 初步定义2.2 仿函数实现2.3 Find功能实现2.4 迭代器初步功能实现2.4.1 运算符重载2.4.2 --运算符重载2.4.3 *运算符重载2.4.4 ->运算符重载2.4.5 !运算符重载2.4.6 begin()2.4.7 end() 2.5 迭代器进阶功能实现2.5.1 set…...

新三消示例项目《Gem Hunter》中的光照和视觉效果

《Gem Hunter》是 Unity 的全新官方示例项目&#xff0c;展示了如何在 Unity 2022 LTS 使用通用渲染管线 (URP) 打造抢眼的光效和视效&#xff0c;让 2D 益智/三消游戏在竞争中脱颖而出。 下载示例项目及其说明文档。准备潜入清澈湛蓝的海水中探寻财富吧&#xff0c;因为那里到…...

通用软件项目技术报告 - 导读III

现在,我们正式进入报告的第六个主要领域:6. 领域六:与第三方服务/API 集成 (含 LLM API)。 连接: 在现代软件开发中,很少有应用程序是完全孤立的。我们经常需要与各种外部的第三方服务或 API 进行集成,以利用它们提供的特定功能(如支付处理、地图服务、社交媒体登录、云…...

代码随想录训练营第二十三天| 572.另一颗树的子树 104.二叉树的最大深度 559.N叉树的最大深度 111.二叉树的最小深度

572.另一颗树的子树&#xff1a; 状态&#xff1a;已做出 思路&#xff1a; 这道题目当时第一时间不是想到利用100.相同的树思路来解决&#xff0c;而是先想到了使用kmp&#xff0c;不过这个题目官方题解确实是有kmp解法的&#xff0c;我使用的暴力解法&#xff0c;kmp的大致思…...

单向循环链表C语言实现实现(全)

#include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FASLE 0//定义宏标识判断是否成功 typedef struct Node {int data;struct Node* next; }Node;Node* InitList() {Node* list (Node*)malloc(sizeof(Node));list->data 0;//创建节点保存datalist…...

【AI大模型】赋能【传统业务】

在数字化转型的浪潮下&#xff0c;传统业务流程&#xff08;如通知公告管理、文档处理等&#xff09;仍依赖人工操作&#xff0c;面临效率低、成本高、易出错等问题。以企业通知公告为例&#xff0c;从内容撰写、摘要提炼到信息分发&#xff0c;需耗费大量人力与时间&#xff0…...

Clion内置宏$PROJECT_DIR$等

CLion 内置宏 文章目录 CLion 内置宏通用路径相关宏路径相对化宏 官方文档地址&#xff1a; https://www.jetbrains.com/help/clion/built-in-macros.html 通用路径相关宏 宏名称含义说明示例$WORKSPACE_DIR$当前项目所属的工作区根目录路径。/home/user/workspace$PROJECT_D…...

团结引擎开源车模 Sample 发布:光照渲染优化 动态交互全面体验升级

光照、材质与交互效果的精细控制&#xff0c;通常意味着复杂的技术挑战&#xff0c;但借助 Shader Graph 14.1.0(已内置在团结引擎官方 1.5.0 版本中)&#xff0c;这一切都变得简单易用。通过最新团结引擎官方车模 Sample&#xff0c;开发者能切身感受到全新光照优化与编辑功能…...

hghac8008漏洞扫描处理

文章目录 环境文档用途详细信息相关文档 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5.10 文档用途 本文只要用于在客户提出hghac8008端口漏洞时&#xff0c;如何进行漏洞处理&#xff0c;本文章的方法已经应用于浪潮云&#xff…...

PyQt5教程:QComboBox下拉列表框的全面解析与实战应用

QComboBox概述 QComboBox是PyQt5中一个集按钮和下拉选项于一体的控件&#xff0c;通常被称为下拉列表框或组合框。它允许用户从预定义的选项列表中选择一个值&#xff0c;是GUI开发中最常用的输入控件之一。 主要特点&#xff1a; 紧凑的界面设计&#xff0c;节省屏幕空间提…...

GAN简读

Abstract 我们提出了一个通过同时训练两个模型的对抗过程来评估生成模型的新框架:一个生成模型 G G G用来捕捉数据特征,还有一个用于估计这个样本是来自训练样本还是 G G G的概率的判别模型 D D D, G G G的训练过程是最大化 D D D犯错的概率。这个框架就相当于一个minimax tw…...

精准测量“双雄会”:品致与麦科信光隔离探头谁更胜一筹

在电子技术飞速发展的当下&#xff0c;每一次精准测量都如同为科技大厦添砖加瓦。光隔离探头作为测量领域的关键角色&#xff0c;能有效隔绝电气干扰&#xff0c;保障测量安全与精准。在众多品牌中&#xff0c;PINTECH品致与麦科信的光隔离探头脱颖而出&#xff0c;成为工程师们…...

NSSCTF [HNCTF 2022 WEEK4]

题解前的吐槽&#xff1a;紧拖慢拖还是在前段时间开始学了堆的UAF(虽然栈还没学明白&#xff0c;都好难[擦汗])&#xff0c;一直觉得学的懵懵懂懂&#xff0c;不太敢发题解&#xff0c;这题算是入堆题后一段时间的学习成果&#xff0c;有什么问题各位师傅可以提出来&#xff0c…...

Step1

项目 SchedulerSim 已搭建完成 ✅ ⸻ ✅ 你现在拥有的&#xff1a; • &#x1f527; 两种调度器&#xff08;Round Robin SJF&#xff09; • &#x1f4e6; 模拟进程类 Process • &#x1f9f1; 清晰结构&#xff1a;OOP 风格 便于扩展 • ✍️ 主函数已演示调度器运行效…...

tornado_登录页面(案例)

目录 1.基础知识​编辑 2.脚手架&#xff08;模版&#xff09; 3.登录流程图&#xff08;processon&#xff09; 4.登录表单 4.1后&#xff08;返回值&#xff09;任何值&#xff1a;username/password &#xff08;4.1.1&#xff09;app.py &#xff08;4.1.2&#xff…...

YOLOv12模型部署(保姆级)

一、下载YOLOv12源码 1.通过网盘分享的文件&#xff1a;YOLOv12 链接: https://pan.baidu.com/s/12-DEbWx1Gu7dC-ehIIaKtQ 提取码: sgqy &#xff08;网盘下载&#xff09; 2.进入github克隆YOLOv12源码包 二、安装Anaconda/pycharm 点击获取官网链接(anaconda) 点击获取…...

BGP实验练习1

需求&#xff1a; 要求五台路由器的环回地址均可以相互访问 需求分析&#xff1a; 1.图中存在五个路由器 AR1、AR2、AR3、AR4、AR5&#xff0c;分属不同自治系统&#xff08;AS&#xff09;&#xff0c;AR1 在 AS 100&#xff0c;AR2 - AR4 在 AS 200&#xff0c;AR5 在 AS …...

Three.js知识框架

一、Three.js 基础概念 1. Three.js 简介 是什么&#xff1f; 基于 WebGL 的 3D JavaScript 库&#xff0c;用于在浏览器中渲染 3D 场景。 核心优势 简化 WebGL 的复杂 API&#xff0c;提供高层封装。 跨平台&#xff08;支持桌面和移动端&#xff09;。 适用场景 3D 可视…...

AWS技术助力企业满足GDPR合规要求

GDPR(通用数据保护条例)作为欧盟严格的数据保护法规,给许多企业带来了合规挑战。本文将探讨如何利用AWS(亚马逊云服务)的相关技术来满足GDPR的核心要求,帮助企业实现数据保护合规。 一、GDPR核心要求概览 GDPR的主要目标是保护欧盟公民的个人数据和隐私权。其核心要求包括: 数…...

HTML、CSS 和 JavaScript 基础知识点

HTML、CSS 和 JavaScript 基础知识点 一、HTML 基础 1. HTML 文档结构 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…...

数据结构与算法分析实验12 实现二叉查找树

实现二叉查找树 1、二叉查找树介绍2.上机要求3.上机环境4.程序清单(写明运行结果及结果分析)4.1 程序清单4.1.1 头文件 TreeMap.h 内容如下&#xff1a;4.1.2 实现文件 TreeMap.cpp 文件内容如下&#xff1a;4.1.3 源文件 main.cpp 文件内容如下&#xff1a; 4.2 实现展效果示5…...

使用 Semantic Kernel 调用 Qwen-VL 多模态模型

使用 Semantic Kernel 调用 Qwen-VL 多模态模型 一、引言 随着人工智能技术的不断发展&#xff0c;多模态模型逐渐成为研究的热点。Qwen-VL 是阿里云推出的大规模视觉语言模型&#xff0c;支持图像、文本等多种输入形式&#xff0c;并能够进行图像描述、视觉问答等多种任务。…...

请求内存算法题

题意描述 有两个数组输入&#xff1a; mem [32,128,64,192,256]表示有数组长度个设备&#xff0c;每个设备能提供分配的内存大小值(均为4的倍数)&#xff0c;数组最大长度200000 reques [64,128,128,128,512]表示请求内存&#xff0c;在mem中找与请求内存大小最相近或相等的…...

(4)python开发经验

文章目录 1 使用ctypes库调用2 使用pybind11 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;Qt开发 &#x1f448;&#x1f449;python开发 &#x1f448; 1 使用ctypes库调用 说明&#xff1a;ctypes是一个Python内置的库&#xff0c;可以提供C兼容的数据类型…...

深度剖析 GpuGeek 实例:GpuGeek/Qwen3-32B 模型 API 调用实践与性能测试洞察

深度剖析 GpuGeek 实例&#xff1a;GpuGeek/Qwen3-32B 模型 API 调用实践与性能测试洞察 前言 GpuGeek专注于人工智能与高性能计算领域的云计算平台&#xff0c;致力于为开发者、科研机构及企业提供灵活、高效、低成本的GPU算力资源。平台通过整合全球分布式数据中心资源&#…...

MindSpore框架学习项目-ResNet药物分类-数据增强

目录 1.数据增强 1.1设置运行环境 1.1.1数据预处理 数据预处理代码解析 1.1.2数据集划分 数据集划分代码说明 1.2数据增强 1.2.1创建带标签的可迭代对象 1.2.2数据预处理与格式化&#xff08;ms的data格式&#xff09; 从原始图像数据到 MindSpore 可训练 / 评估的数…...