牛客周赛 Round 63(bfs洪水填充,行列式,推式子,前缀和上前缀和)

news2024/12/21 22:49:45

比赛链接

牛客周赛 Round 63

A题

代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5;
const int inf = 0x3f3f3f3f3f3f3f3f;
string s;
void solve()
{
	cin >> s;
	if (s.size() == 2 && s[0] == s[1])
	{
		cout << "Yes" << endl;
	}
	else cout << "No" << 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题

思路

n n n只有1e3,可以 n 2 n^2 n2暴力做。

代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e3 + 5;
const int inf = 0x3f3f3f3f3f3f3f3f;

int n, k;
int a[N];
void solve()
{
	cin >> n >> k;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	int ans = 0;
	for (int i = k; i <= n; i++)
	{
		int cnt = 0;
		for (int low = i - k + 1, high = i; low < high; low++, high--)
		{
			if (a[low] != a[high]) cnt++;
		}
		if (cnt == 1) 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;
}

C题

思路

做一遍bfs洪水填充即可。

代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e2 + 5;
const int inf = 0x3f3f3f3f3f3f3f3f;

int n, m;
int a[N][N];
int dx[2] = {0, 1}, dy[2] = {1, 0};
void solve()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			cin >> a[i][j];
		}
	}

	queue<pair<int, int>>q;
	q.push({1, 1});
	while (q.size())
	{
		int cx = q.front().first;
		int cy = q.front().second;
		if (cx == n && cy == m)
		{
			cout << "Yes" << endl;
			return;
		}
		q.pop();
		for (int i = 0; i < 2; i++)
		{
			int tx = cx + dx[i];
			int ty = cy + dy[i];
			if (tx < 1 || tx > n || ty < 1 || ty > m) continue;
			if (a[tx][ty] != a[1][1]) continue;
			q.push({tx, ty});
		}
	}
	cout << "No" << 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题

思路

众所周知,行列式 ∣ 1 1 1 1 2 3 1 1 2 ∣ \begin{vmatrix} 1& 1& 1\\ 1& 2& 3\\ 1& 1& 2 \end{vmatrix} 111121132 的值为 1 1 1。根据行列式的性质,对其中的任意一行的元素同时乘以 x x x,则行列式的值变为 1 ∗ x 1*x 1x

代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e2 + 5;
const int inf = 0x3f3f3f3f3f3f3f3f;

int x;
int a[3][3] = {{1, 1, 1}, {1, 2, 3}, {1, 1, 2}};
void solve()
{
	cin >> x;
	if (x == 0)
	{
		for (int i = 0; i < 3; i++)
		{
			for (int j = 0; j < 3; j++)
			{
				cout << 1 << " ";
			}
			cout << endl;
		}
	}
	else
	{
		for (int i = 0; i < 3; i++)
		{
			for (int j = 0; j < 3; j++)
			{
				if (i == 0)
					cout << x << " ";
				else cout << a[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;
}

E题

思路

对于字符串redreeddeer,假设我们翻转加粗的这个区间,我们将这个区间命名为 L L L

对于 L L L左边的 r r r的数量,我们定义为 l r lr lr L L L右边 d d d的数量我们定义为 h d hd hd

对于 L L L内的每一个 e e e,我们选择分开进行讨论。

假设 L L L其中一个 e e e左边的 d d d的数量为 o p d opd opd,右边 r r r的数量定义为 o p r opr opr(仅限于区间 L L L内)。

则反转区间 L L L之后新增的子序列 r e d red red的数量为: ( o p r + l r ) × ( o p d + h d ) (opr+lr) \times (opd+hd) (opr+lr)×(opd+hd)

我们定义 p r e [ ] pre[] pre[]为原始序列字符 r r r的前缀和, n x t [ ] nxt[] nxt[]为原始序列字符 d d d的后缀和。

假设当前考虑的区间 L L L中的元素 e e e的下标为 i d x idx idx

则: o p r = p r e [ r ] − p r e [ i d x ] opr = pre[r] - pre[idx] opr=pre[r]pre[idx] l r = p r e [ l − 1 ] lr = pre[l-1] lr=pre[l1] o p d = n x t [ l ] − n x t [ i d x ] opd = nxt[l] - nxt[idx] opd=nxt[l]nxt[idx] h d = n x t [ r + 1 ] hd = nxt[r+1] hd=nxt[r+1]

( o p r + l r ) × ( o p d + h d ) = ( p r e [ r ] − p r e [ i d x ] + p r e [ l − 1 ] ) × ( n x t [ l ] − n x t [ i d x ] + n x t [ r + 1 ] ) (opr+lr) \times (opd+hd) = (pre[r] - pre[idx] + pre[l-1]) \times (nxt[l] - nxt[idx] + nxt[r+1]) (opr+lr)×(opd+hd)=(pre[r]pre[idx]+pre[l1])×(nxt[l]nxt[idx]+nxt[r+1])

我们令 l o w r = p r e [ r ] + p r e [ l − 1 ] lowr = pre[r] + pre[l-1] lowr=pre[r]+pre[l1] h i g h d = n x t [ l ] + n x t [ r + 1 ] highd = nxt[l] + nxt[r+1] highd=nxt[l]+nxt[r+1]

( p r e [ r ] − p r e [ i d x ] + p r e [ l − 1 ] ) × ( n x t [ l ] − n x t [ i d x ] + n x t [ r + 1 ] ) (pre[r] - pre[idx] + pre[l-1]) \times (nxt[l] - nxt[idx] + nxt[r+1]) (pre[r]pre[idx]+pre[l1])×(nxt[l]nxt[idx]+nxt[r+1])进行拆解得到: l o w r × h i g h d − p r e [ i d x ] × h i g h d − l o w r × n x t [ i d x ] + p r e [ i d x ] × n x t [ i d x ] lowr \times highd - pre[idx] \times highd - lowr \times nxt[idx] + pre[idx] \times nxt[idx] lowr×highdpre[idx]×highdlowr×nxt[idx]+pre[idx]×nxt[idx]

对于区间 L L L内所有 e e e l o w r lowr lowr h i g h d highd highd都是固定不变的,所以我们可以通过预处理得到。而对于所有的 e e e p r e [ i d x ] pre[idx] pre[idx]的和与 n x t [ i d x ] nxt[idx] nxt[idx]的和,我们可以分别在前缀和数组上再做一次前缀和来实现快速计算。

代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5 + 5;
const int inf = 0x3f3f3f3f3f3f3f3f;

int n, q;
int R[N], D[N], SR[N], SD[N];
int RD[N];
int sum[N], num[N];
char s[N];
void solve()
{
	cin >> n >> q;
	for (int i = 1; i <= n; i++)
	{
		cin >> s[i];
	}
	for (int i = 1, j = n; i <= n; i++, j--)
	{
		R[i] = R[i - 1], D[j] = D[j + 1];
		if (s[i] == 'r') R[i]++;
		if (s[j] == 'd') D[j]++;
	}
	for (int i = 1, j = n; i <= n; i++, j--)
	{
		if (s[i] == 'e') SR[i] = R[i];
		if (s[j] == 'e') SD[j] = D[j];
		SR[i] += SR[i - 1], SD[j] += SD[j + 1];
	}
	for (int i = 1; i <= n; i++)
	{
		if (s[i] == 'e')
		{
			RD[i] = R[i] * D[i];
		}
		RD[i] += RD[i - 1];
	}
	int ans = 0;
	for (int i = 1; i <= n; i++)
	{
		if (s[i] == 'e')
		{
			num[i]++;
			sum[i]	= (R[i - 1] * D[i + 1]);
		}
		num[i] += num[i - 1];
		sum[i] += sum[i - 1];
	}
	ans = sum[n];

	while (q--)
	{
		int l, r;
		cin >> l >> r;
		int cnt = num[r] - num[l - 1];
		int res = ans - (sum[r] - sum[l - 1]);
		int lowr = R[r] + R[l - 1], highd = D[l] + D[r + 1];
		int op = cnt * lowr * highd - (SR[r] - SR[l - 1]) * highd - lowr * (SD[l] - SD[r + 1]) + (RD[r] - RD[l - 1]);

		cout << res + op << 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题

思路

没做出来,过两天补上…

代码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

直播相关04-录制麦克风声音, 通过编程录音

一 通过编程录音 开发录音功能的主要步骤是&#xff1a; 注册设备获取输入格式对象打开设备采集数据释放资源 需要用到的FFmpeg库有4个。 extern "C" { // 设备相关API #include <libavdevice/avdevice.h> // 格式相关API&#xff0c;也就是说&#xff0c;win…

Mysql(2)—SQL语法详解(通俗易懂)

一、关于SQL 1.1 简介 SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种用于管理关系型数据库的标准编程语言。它主要用于数据的查询、插入、更新和删除等操作。SQL最初在1970年代由IBM的研究人员开发&#xff0c;旨在处理关系数据模型…

Python基础常见面试题总结

文章目录 1.深拷贝与浅拷贝2.迭代器3.生成器4.装饰器5.进程、线程、协程6.高阶函数7.魔法方法8.python垃圾回收机制 1.深拷贝与浅拷贝 浅拷贝是对地址的拷贝&#xff0c;只拷贝第一层&#xff0c;第一层改变的时候不会改变&#xff0c;内层改变才会改变。深拷贝是对值的拷贝&a…

【第十六周】回顾线性回归与逻辑回归以及它们的详细推导过程

目录 摘要Abstract1.线性回归1.1.一元线性回归1.1.1.函数凹凸性判断 1.2.多元线性回归1.3.进一步理解梯度下降法 2.逻辑回归2.1.信息论角度推导交叉熵损失函数2.2.概率论角度推导交叉熵损失函数 3.额外阅读&#xff1a;Label Smoothing3.1.One-hot 和 Label Smoothing 的优缺点…

解决报错:Invalid number of channels [PaErrorCode -9998]

继昨天重装了树莓派系统后&#xff0c;今天开始重新安装语音助手。在测试录音代码时遇到了报错“Invalid number of channels [PaErrorCode -9998]”&#xff0c;这是怎么回事&#xff1f; 有人说这是因为pyaudio没有安装成功造成的。于是&#xff0c;我pip3 install –upgrad…

利用python创建接口

目录 1. 创建一个简单的接口1.1 具体过程1.2 代码解读1. **导入 Flask**2. **创建 Flask 应用**3. **定义一个路由**4. **运行应用** 1.3 遗留问题 2. 创建一个复杂接口2.2 具体过程 1. 创建一个简单的接口 1.1 具体过程 from flask import Flaskapp Flask(__name__)app.rou…

pip安装指定版本的tensorflow

安装CPU版本&#xff1a;(以2.9.0版本为例) pip install tensorflow2.9.0安装GPU版本&#xff1a;(以2.9.0版本为例) pip install tensorflow-gpu2.9.0若下载缓慢&#xff0c;使用阿里国内镜像源加速下载&#xff1a;(以2.9.0版本为例) pip install -i https://mirrors.aliy…

一些硬件知识【20241013】

3C认证要花很多钱&#xff1a; X电容可以滤除差模信号干扰&#xff0c;当火线上有高频干扰信号时候&#xff0c;X电容利用两端压差将干扰送到N: Y电容针对于零火线上有相位相同的共模干扰信号的时候&#xff0c;将干扰导向大地&#xff1a; 电阻上并联一个电容有什么作用&#…

mac安装homebrew和git

简介 由于把自己的新mac拿来撸代码&#xff0c;开始环境搭建&#xff0c;安装各种工具和依赖&#xff0c;安装 git 需要先安装 homebrew&#xff0c;然后就遇到了 homebrew 安装失败的问题。 curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection…

多字节字符集MFC使用 Windows Visual Styles

新建一个记事本&#xff0c;然后添加以下代码 <?xml version"1.0" encoding"UTF-8" standalone"yes"?> <assembly xmlns"urn:schemas-microsoft-com:asm.v1" manifestVersion"1.0"><trustInfo xmlns"…

STM32 | STM32F4OTA_ESP8266_Bootloader为引导程序远程更新的代码(APP)

更新。点击上方"蓝字"关注我们 01、思路 >>> STM32F4OTA_ESP8266_Bootloader为引导程序 远程更新的代码&#xff08;APP&#xff09;:远程更新的APP Ymoden_server&#xff1a;为运行在Linux的TCP服务器 备注&#xff1a;STM32 OTA远程更新需要连接热点 电…

地级市-国内旅游收入、国内旅游人数数据(2000-2023年)

国内旅游收入是指国内游客在旅行过程中的全部花费&#xff0c;包括交通、参观游览、住宿、餐饮、购物和娱乐等。这一指标不包括国际游客在国内的消费&#xff0c;主要反映国内旅游市场的经济规模和发展水平&#xff0c;是评估旅游行业对国民经济贡献的重要参数。 地级市-国内旅…

安全可靠测评结果公告(2024年第2号)

大家可以选择对应的数据库&#xff0c;中央处理器&#xff0c;供参考

【C++】--内存管理

&#x1f47e;个人主页: 起名字真南 &#x1f47b;个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 C/C内存分布2 C语言中动态内存管理方式 &#xff1a;3 C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4 operator new与operator delete4.1 opera…

Cortex-M 内核的 OS 特性

目录 一、通用堆栈知识二、双堆栈用法三、PendSV 中断介绍和用法四、SVC 软中断介绍和用法五、特权级和非特权级使用方法 一、通用堆栈知识 在前面讲解 STM32 启动文件的时候就已经提到过&#xff0c;有关堆栈大小的设置是在启动文件中设置的&#xff1a; Heap 主要用于 Mal…

学习Redisson实现分布式锁

官网&#xff1a;https://redisson.org/ 官方文档&#xff1a;https://redisson.org/docs/getting-started/ 官方中文文档&#xff1a;https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95 1、引入依赖 <!--redisson--> <dependency><groupId>or…

基础教程 | 用VuePress搭建一个简单的个人博客(附源码)

先附上自己个人博客页面&#xff1a;https://illusionno.github.io/ 源码也在这里&#xff1a;https://github.com/illusionno/my-blog &#xff08;如果觉得有帮助&#xff0c;可以点颗star✨&#xff09; 使用的主题是vuepress-theme-reco2.x&#xff0c;并在上面进行了一些调…

基于Java Web众筹系统的设计与实现

文未可获取一份本项目的java源码和数据库参考。 体育俱乐部是我国体育产业的重要组成部分&#xff0c;而乒乓球作为“国球”&#xff0c;在我国拥有最广泛的群众基础。在世界乒坛&#xff0c;面对如此激烈的外部竞争环境&#xff0c;我国乒乓球运动应扎扎实实地研究基层职业乒乓…

考研C语言程序设计_语法相关(持续更新)

目录 一、语法题strlen转义字符内置数据类型字符串结束标志局部变量和全局变量名字冲突 局部优先switch语句中的关键字数组初始化是否正确注意define不是关键字C语言中不能用连等判断switch( )的括号里可以是什么类型?关于if关于switch 二、程序阅读题有关static有关continue说…

初级前端面试(2)

1.讲一下闭包相关知识&#xff0c;和普通函数有什么区别 闭包是什么&#xff1a;JS中内层函数可以访问外层函数的变量&#xff0c;外层函数无法操作内存函数的变量的特性。我们把这个特性称作闭包。 闭包的好处&#xff1a; 隔离作用域&#xff0c;保护私有变量&#xff1b;…