Codeforces Round 861 (Div. 2)(A~D)

news2024/11/24 8:25:51

A. Lucky Numbers

给出边界l和r,在区间[l, r]之间找到幸运值最大的数字。一个数字的幸运值被定义为数位差的最大值,即数字中最大的数位和最小的数位的差。

思路:因为涉及到至少两位,即个位和十位变化最快,最容易得到相差最多的两个数位,所以我们只需要暴力判断几百个数即可,因为在100个数之内两个数一定遍历过了所有情况,这样额复杂度也是可以通过的。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
const int N = 2e5 + 5;
int t, l, r;

int getans(int x) {
	int max = 0, min = 100;
	while(x) {
		int num = x % 10;
		max = std::max(max, num);
		min = std::min(min, num);
		x /= 10;
	}
	return max - min;
}

int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	std::cout.tie(0);
	std::cin >> t;
	while(t --) {
		std::cin >> l >> r;
		int max = -1, ans;
		for(int i = l; i <= std::min(l + 300, r); i ++) {
			if(max < getans(i))
				max = getans(i), ans = i;
		}
		std::cout << ans << '\n';
	}
	return 0;
}

 B. Playing in a Casino

给出n个数组,对于每对数组,计算题目中给出的值的和。

思路:观察计算操作,我们需要对于每一列进行操作,而且可以发现排序完成后每个数对于结果的贡献是(n - i) * a[i] - (i - 1) * a[i],其中i是该数的索引,n是数字个数。这样遍历一遍计算结果即可。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
const int N = 2e5 + 5;
int t, n, m;

int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	std::cout.tie(0);
	std::cin >> t;
	while(t --) {
		std::cin >> n >> m;
		ll a[n + 1][m + 1], b[m + 1][n + 1];
		for(int i = 1; i <= n; i ++) {
			for(int j = 1; j <= m; j ++) {
				std::cin >> a[i][j];
			}
		}
		ll ans = 0;
		for(int j = 1; j <= m; j ++) {
			for(int i = 1; i <= n; i ++) {
				b[j][i] = a[i][j];
			}
			std::sort(b[j] + 1, b[j] + 1 + n, std::greater<ll>());
			for(int i = 1; i <= n; i ++) {
				ans += (n - 2 * i + 1) * b[j][i];
			}
		}
		std::cout << ans << '\n';
	}
	return 0;
}

 C. Unlucky Numbers

题目大意与A一样,但是在这个题要求我们求幸运值最小的数字。

思路:其实看到这个题,很容易会想到对于每一位进行操作,这样的操作是在时间复杂度的允许范围内的, 也是属于比较普遍的做法。考虑这样一种做法,目标数字的高位与l或r相同,后面的几位都是相同的,这样可以尽可能缩小后面几位的差别对结果的影响,具体见代码。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
const int N = 2e5 + 5;
int t;
ll l, r;

int getans(ll x) {
	ll max = 0, min = 10;
	while(x) {
		max = std::max(max, x % 10);
		min = std::min(min, x % 10);
		x /= 10;
	}
	return max - min;
}

int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	std::cout.tie(0);
	std::cin >> t;
	while(t --) {
		std::cin >> l >> r;
		if(l < 10 || l == r) {
			std::cout << l << '\n';
			continue;
		}
		int a[20], b[20];
		int len1 = 0, len2 = 0;
		ll num = l;
		while(num) a[++ len1] = num % 10, num /= 10;
		num = r;
		while(num) b[++ len2] = num % 10, num /= 10;
		int ans = 10;
		ll val = -1;
		int sum = getans(l);
		if(sum < ans)
			val = l, ans = sum;
		sum = getans(r);
		if(sum < ans)
			val = r, ans = sum;
		ll x = 0;
		for(int i = len1; i >= 1; i --) {
			for(int j = 0; j <= 9; j ++) {
				ll tt = x;
				for(int k = i; k >= 1; k --) {
					tt = tt * 10 + j;
				}
				if(tt < l || tt > r) continue;
				int res = getans(tt);
				if(res < ans)
					ans = res, val = tt;
			}
			x = x * 10 + a[i];
		}
		x = 0;
		for(int i = len2; i >= 1; i --) {
			for(int j = 0; j <= 9; j ++) {
				ll tt = x;
				for(int k = i; k >= 1; k --) {
					tt = tt * 10 + j;
				}
				if(tt < l || tt > r) continue;
				int res = getans(tt);
				if(res < ans)
					ans = res, val = tt;
			}
			x = x * 10 + b[i];
		}
		std::cout << val << '\n';
	}
	return 0;
}

D. Petya, Petya, Petr, and Palindromes

 给出一个长为n的数组,对于每个长度为k的连续数组,它的代价是变为回文数组的最小修改次数。求所有长度为k的数组代价之和。

思路:正向思考并不容易算,我们可以考虑反着来。可以对于每一对数字的贡献计算,在全部的对数中减去不做出贡献的数对。因为k一定是奇数,所以对称的位置的奇偶性都是相同的,我们可以对于每个数计算与它可以配对的数量,具体做法可以在区间内二分找到配对的个数。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
#define int long long
const int N = 2e5 + 5;
int n, k;
std::vector<int> vec[N][2];

signed main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	std::cout.tie(0);
	std::cin >> n >> k;
	if(k == 1) {
		std::cout << 0 << '\n';
		return 0;
	}
	ll ans = (n - k + 1) * (k / 2);
	for(int i = 1; i <= n; i ++) {
		int x;
		std::cin >> x;
		vec[x][i & 1].push_back(i);
	}
	auto get = [&](const std::vector<int> &v, int l, int r) {
		return upper_bound(v.begin(), v.end(), r) - lower_bound(v.begin(), v.end(), l);
	};
	for(int i = 0; i < 2; i ++) {
		for(int j = 1; j <= 200000; j ++) {
			for(auto u : vec[j][i]) {
				int l = std::max((k - 1) + 2 - u, u - k + 1);
				int r = std::min(u - 2, 2 * n - (k - 1) - u);
				if(l <= r) ans -= get(vec[j][i], l, r);
			}
		}
	}
	std::cout << ans << '\n';
	return 0;
}

 os:学着写一下匿名函数,,感觉很方便但是总是记不住格式QWQ

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

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

相关文章

Android四大组件之广播接收者BroadcastReceiver

一、全局广播 Android中的广播可以分为两种类型&#xff1a;标准广播和有序广播 标准广播&#xff1a;一种完全异步执行的广播&#xff0c;在广播发出之后&#xff0c;所有的广播接收器几乎都会同一时刻接收到这条广播消息&#xff0c;因此它们之间没有任何先后顺序。无法进行…

Vector-常用CAN工具 - 入门到精通 - 专栏链接

一、CANoe篇 1、CANoe入门到精通_软件安装 2、CANoe入门到精通_硬件及环境搭建 3、CANoe入门到精通_软件环境配置 4、CANoe入门到精通_Network Node CAPL开发 5、CANoe入门到精通_Node节点开发基本数据类型 6、CANoe入门到精通_Test Node节点开发设置 7、CANoe入门到精通…

《Cocos Creator游戏实战》AIGC之将草稿内容转为真实内容

目录 前言 训练AI 从识别结果中提取必要数据 发送图片并生成最终代码 总结与提高 资源下载 前言 当创作灵感来的时候&#xff0c;我们可能会先把灵感记录在草稿上&#xff0c;之后再去实现它。比方说有一天&#xff0c;我突然来了游戏创作灵感&#xff0c;想着那可以先把…

gpt 怎么用-免费gpt下载使用方法

gpt 怎么用 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种基于Transformer的神经网络模型&#xff0c;用于自然语言处理任务&#xff0c;例如文本生成、摘要生成、翻译、问答等。以下是使用GPT进行文本生成的一般步骤&#xff1a; 首先&#xff0c;您…

编译预处理

编译预处理 1、宏定义1.1、 无参宏定义1.2、使用宏定义的优点1.3、宏定义注意点1.4、带参数的宏(重点)1.5、条件编译1.6、宏定义的一些巧妙用法(有用)1.7、结构体占用字节数的计算原则&#xff08;考题经常考&#xff0c;要会画图&#xff09;1.8、#在宏定义中的作用&#xff0…

转型产业互联网,新氧能否再造辉煌?

近年来&#xff0c;“颜值经济”推动医美行业快速发展&#xff0c;在利润驱动下&#xff0c;除了专注医美赛道的企业之外&#xff0c;也有不少第三方互联网平台正强势进入医美领域&#xff0c;使以新氧为代表的医美企业面对不小发展压力&#xff0c;同时也展现出强大的发展韧性…

六、CANdelaStudio入门-通信参数编辑

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的通信参数编辑,欢迎各位朋友订阅、评论,…

Kubernetes 笔记(16)— 集群管理、使用名字空间分隔系统资源、给名字空间设置资源限额、默认资源配额的使用

1. 为什么要有名字空间 首先要明白&#xff0c;Kubernetes 的名字空间并不是一个实体对象&#xff0c;只是一个逻辑上的概念。它可以把集群切分成一个个彼此独立的区域&#xff0c;然后我们把对象放到这些区域里&#xff0c;就实现了类似容器技术里 namespace 的隔离效果&…

MATLAB符号运算(七) 更新中...

目录 1、实验目的&#xff1a; 2、实验内容&#xff1a; 1、实验目的&#xff1a; 1&#xff09;掌握定义符号对象和创建符号表达式的方法&#xff1b; 2&#xff09;掌握符号运算基本命令和规则&#xff1b; 3&#xff09;掌握符号表达式的运算法则以及符号矩阵运算&#xf…

93、Dehazing-NeRF: Neural Radiance Fields from Hazy Images

简介 论文&#xff1a;https://arxiv.org/pdf/2304.11448.pdf 从模糊图像输入中恢复清晰NeRF 使用大气散射模型模拟有雾图像的物理成像过程&#xff0c;联合学习大气散射模型和干净的NeRF模型&#xff0c;用于图像去雾和新视图合成 通过将NeRF 3D场景的深度估计与大气散射模…

【牛客刷题专栏】23:JZ22 链表中倒数最后k个结点(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转)&#xff0c;它登陆后会保存刷题记录进度&#xff0c;重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏&#xff1a;个人CSDN牛客刷题专栏。 题目来自&#xff1a;牛客/题库 / 在线编程 / 剑指offer&#xff1a; 目录 前言问…

LeetCode-344. 反转字符串

题目链接 LeetCode-344. 反转字符串 题目描述 题解 题解一&#xff08;Java&#xff09; 作者&#xff1a;仲景 直接双指针前后一直交换即可 class Solution {public void reverseString(char[] s) {if (s.length 1)return;// 双指针int lp 0, rp s.length - 1;while (lp…

【百度智能云】基于http3的xcdn 开放直播方案设计与实践

大神:柯老师 现有的融合CDN 0 需要集成sdksdk 是集成在端侧缺点 sdk 对端侧有影响多云模式下,sdk不互通、 XCDN 设计目标 :保持现有cdn的优势 承载各种业务:直播点播让各家的cdn互通cdn 厂家屏蔽了差异性,集成起来比较简单,对接简单开发的互联网生态。使用统一的http3标…

理解缓冲区

文章目录 一.缓冲区1.什么是缓冲区2.缓冲区的意义3.缓冲区的刷新策略4.我们目前谈论的缓冲区在哪里5.仿写FILE5.1myStdio.h5.2myStdio.c 6.操作系统的缓冲区 一.缓冲区 int main() {printf("hello linux");sleep(2);return 0; }对于这样的代码&#xff0c;首先可以肯…

C++11 unique_ptr智能指针

#include<iostream> using namespace std;class test { public:test() {cout << "调用构造函数" << endl;}~test() {cout << "调用析构函数" << endl;} };int main(void) {//1.构造函数unique_ptr<test>t1;unique_ptr…

数据结构之KMP算法:彻底搞懂kmp算法

数据结构的学习&#xff0c;kmp匹配算法困扰我许久&#xff0c;此处来一个总结&#xff08;仅供自己复习了解参考使用&#xff09;&#xff0c;如果有不对的地方请多多指点。好了废话不多说我们直接开始好吧。 目录 关于暴力匹配原理的讲解&#xff1a; kmp算法&#xff1a; …

ChatGPT - 如何高效的调教ChatGPT (指令建构模型-LACES问题模型)

文章目录 定义1. Limitation&#xff08;限定条件&#xff09;2. Assignment&#xff08;分配角色&#xff09;3. Context&#xff08;背景或上下文&#xff09;4. Example&#xff08;示例&#xff09;5. Step by Step&#xff08;拆分任务&#xff09; 小Demo 定义 LACES问题…

尚硅谷大数据技术Spark教程-笔记04【SparkCore(核心编程,RDD-行动算子-序列化-依赖关系-持久化-分区器-文件读取与保存)】

视频地址&#xff1a;尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01【Spark&#xff08;概述、快速上手、运行环境、运行架构&#xff09;】尚硅谷大数据技术Spark教程-笔记02【SparkCore&#xff08;核心编程&#xff0c;RDD-核心属…

加强人工智能共性技术研发与产业化协同发展

央视网消息&#xff1a;“以5G为代表的新一代信息技术与制造业、交通、旅游等实体经济重要领域深度融合。”4月20日下午&#xff0c;国新办举行一季度工业和信息化发展情况新闻发布会&#xff0c;相关部门负责人在答问时表示&#xff0c;将用好融合应用这把金钥匙&#xff0c;开…

ReactHook学习(第一篇-N)

文章目录 Hook简介概述class组件的不足什么是 Hook?Hook 使用规则 state的研究&#xff08;useState&#xff09;State&#xff1a;组件的记忆&#xff08;响应式数据&#xff09;当普通的变量无法满足时添加一个 state 变量遇见你的第一个 Hook剖析 useState 赋予一个组件多个…