牛客寒假第一场补题

news/2025/2/4 23:26:45/文章来源:https://www.cnblogs.com/xdeyt/p/18698625

寒假第一场补题

C、兢兢业业之移

题意:给定一个\(n\times n\)\(01\)矩阵,其中有\(\frac{n^2}{4}\)\(1\),其余为\(0\),求如何将所有\(1\)移到左上角的一个\(\frac{n}{2}\times\frac{n}{2}\)的正方形区域中。

思路:对于每一个左上角的\(0\),用\(bfs\)找到最佳的\(1\)和最短路径,移动过去。

void solve()
{int n;cin >> n;vector<string> g(n);vector<vector<bool>> vis(n,vector<bool>(n,false));vector<array<int,4>> ans;for(int i = 0 ; i < n ; i ++) cin >> g[i];auto bfs = [&](int sx,int sy){queue<PII> q;vector<vector<PII>> pre(n,vector<PII>(n));vector<vector<int>> d(n,vector<int>(n,-1));d[sx][sy] = 0;q.push({sx,sy});while(q.size()){auto [x,y] = q.front();q.pop();if(g[x][y] == '1'){swap(g[x][y],g[sx][sy]);while(x != sx || y != sy){auto [prex,prey] = pre[x][y];ans.push_back({prex,prey,x,y});x = prex, y = prey;                    }return;}for(int i = 0 ; i < 4 ; i ++){int nx = x + dx[i], ny = y + dy[i];if(nx < 0 || ny < 0 || nx >= n || ny >= n) continue;if(d[nx][ny] != -1 || vis[nx][ny]) continue;d[nx][ny] = d[x][y] + 1;pre[nx][ny] = {x,y};q.push({nx,ny});}}};for(int i = 0 ; i < n / 2 ; i ++){for(int j = 0 ; j < n / 2 ; j ++){if(g[i][j] == '0')bfs(i,j);vis[i][j] = true;}}cout << ans.size() << endl;for(auto [a,b,c,d] : ans)cout << a + 1 << " " << b + 1 << " " << c + 1 << " " << d + 1 << endl;
//     for(int i = 0 ; i < n ; i ++) cout << g[i] << endl;
}

F、双生双宿之探

题意:给定一个长度为\(n\)的数组,求有多少个连续区间构成双生数组(区间内只有两个数,且数量相等)

思路

1、双生数组只能有两个值\(\Rightarrow\)找到所有最长的连续区间,且只有两个数\(\Rightarrow\)用双指针

2、双生数组中需要两个数数量相同\(\Rightarrow\)一个数记为\(1\),另一个数记为\(-1\),求前缀和后,重复出现的\(sum\)即为贡献\(\Rightarrow\)前缀和求和为\(0\)的区间个数(贡献)

void solve()
{int n;int ans = 0;cin >> n;vector<int> a(n+1);for(int i = 1 ; i <= n ; i ++) cin >> a[i];int l = 1, r = 0;set<int> st;auto get = [&](int l,int r){
//         cout << l << " " << r << endl;vector<int> sum(n+1,0);int f = a[l];for(int i = l; i <= r ; i ++){if(a[i] == f) sum[i] = 1;else sum[i] = -1;sum[i] += sum[i-1];}map<int,int> cnt;cnt[0]++;for(int i = l ; i <= r ; i ++){ans += cnt[sum[i]];cnt[sum[i]] ++;}};while(l<=n&&r<=n){r++;st.insert(a[r]);if(st.size() == 1) continue;else if(st.size() == 3){get(l,r-1);
//             cout << l << " " << r - 1 << endl;st.clear();st.insert(a[r]);st.insert(a[r-1]);l = r - 1;while(a[l-1] == a[l]) l --;}}cout << ans << endl;    
}

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

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

相关文章

Windows下本地部署deepseek

如果你对DS有深度使用需要,且电脑配置不错,那就本地部署deepseek试试吧。 1、下载并安装Ollama Ollama是一个开源的 LLM(大型语言模型)服务工具(就是大模型运行工具),用于简化在本地运行大语言模型,降低使用大语言模型的门槛,使得大模型的开发者、研究人员和爱好者能够…

使用 FFmpeg命令 通过 RTMP 协议推送本地视频

背景:有时候想模拟一下往流媒体服务器推流,就可以使用强大的ffmpeg这个工具来模拟推流了。 使用也很简单,一条命令即可将本地视频通过rtmp协议推送到流媒体服务器了。 命令如下: ffmpeg -re -i [本地mp4文件路径] -c:a aac -ar 44100 -f flvrtmp://your-server/your-applic…

黑天鹅

流光忆庭的忆者,慵懒神秘的占卜师。 耐心聆听「记忆」,诸般命运尽在掌握。

镜流

曾经的罗浮剑首,云骑军不败盛名的缔造者。 而今其名已被抹去,成为行于魔阴边缘的仙舟叛徒。

真理医生

「我甚至无法和一个蠢材解释何为『蠢材』。」 直率而自我的博识学会学者,常以奇怪的石膏头雕遮蔽面容。 自幼便展露出过人的才智,如今却以「庸人」自居。 坚信智慧与创造力并不为天才独有,致力于向全宇宙传播知识,医治名为愚钝的顽疾。

九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位)

九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位) @目录九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位)1. RDB 概述2. RDB 持久化执行流程3. RDB 的详细配置4. RDB 备份&恢复5. RDB 持久化小结(优势 和 劣势)6. 最后:R…

一次性讲清楚INNER JOIN、LEFT JOIN、RIGHT JOIN的区别和用法详解

INNER JOIN、LEFT JOIN、RIGHT JOIN的区别接下来通过例子帮助理解他们之间的区别 首先,我们创建示例数据库和表。同时也要明确一个概念:A INNER/LEFT/RIGHT JOIN B操作中,A表被称为左表,B表被称为右表。 创建示例数据库school,在数据库school下创建两张示例表:student、p…

多项式全家桶【长期更新】

目录多项式定义(表达式)暴力全家桶加法乘法余数除法求导和积分求逆开根求对数求指数求三角函数快速傅里叶变换FFT,快速多项式前置内容FFT核心思路具体做法常数优化:非递归FFT 多项式 定义(表达式) 定义一个 \(n\) 次的多项式为: \[F(x) = \sum^n_{i=0}f_ix^i \]注意 :\(…

第3章 进程 - RTOS 进程切换

1 参考文档6. 线程的定义与线程切换的实现 — [野火]RT-Thread内核实现与应用开发实战——基于STM32 文档 RTOS的线程,是一个独立的、无限循环且不能返回的函数。2 定义线程栈 RTOS中存在多线程和线程切换,没有进程的概念,也不需要进程的概念; 每个线程都有线程栈,通常是预…

【vscode配置】一种基于Beta版UTF-8解决VSCode中C/C++/Python等的中文乱码问题的简便方法

在VSCode或其他编码场景下输入输出中文时会出现乱码,常用的解决方式是通过GBK编码重新打开或保存文件后再使用 但又是来回切换保存会导致代码中的中文变成乱码难以恢复 而且个人觉得来回切换很麻烦 下面给出一种了解到的解决方法:控制面板——时钟和区域——区域——管理——…

Graphviz-画数据结构图的利器

1.Win系统上的安装 安装Graphviz的方法有很多,以下是手动安装的方式: 1.访问 https://graphviz.org/download/,选择你想要下载的版本,手动安装选择ZIP安装包;2.解压下载的zip压缩包到你选择的文件目录,例如:D:\Graphviz-12.2.1-win64; 3.将Graphviz的安装目录(如:D:\…

4G优先级切换

本文来自博客园,作者:{IceSparks},转载请注明原文链接:https://www.cnblogs.com/IceSparks/p/18698508