思维训练2

news2024/11/8 15:24:01

题目描述1

Problem - A - Codeforces

题目分析

通过题目发现a[1] = d[1],

a[i] = d[i] + a[i - 1]

由于所有的数都为正数,所以只要出现a[i - 1] - d[i] >= 0这种情况a[i]就可以取为绝对值,也就是说a[i]会有一正一负两种情况,当然,如果在这个a[i - 1] - d[i] >= 0条件我们要保证d[i]是不为0的不然正负都是只有一种情况

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int d[N], a[N];
void solve()
{
	int n;
	memset(d, 0, sizeof d);
	memset(a, 0, sizeof a);
	cin >> n;
	for(int i = 1; i <= n; i ++)cin >> d[i];
	a[1] = d[1];
	for(int i = 2; i <= n; i ++)
	{
		a[i] = d[i] + a[i - 1];
		if(d[i] && a[i - 1] - d[i] >= 0)
		{
			cout << - 1 << '\n';
			return;
		}
	}
	for(int i = 1; i <= n; i ++)cout << a[i] << ' ';
	cout << '\n';
}
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t;
	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

题目描述2 

Problem - B - Codeforces

题目分析

我们最终的目的是为了升序排序,且其操作为反转操作,故我们从数组两边使用双指针,遇到01需要进行反转的就停下做出一次记录(此处使用vector)即可,注意输出时从小到大即可,所以需要排序

#include<bits/stdc++.h>
using  namespace std;
const int N = 2e5 + 10;
void solve()
{
	char a[N];
	int n, flag = 0;
	cin >> n;
	for(int i = 1; i <= n; i ++)
	{
		cin >> a[i];
	}
	for(int i = 2; i <= n; i ++)
	{
		if(a[i - 1] > a[i])flag = 1;
	}
	if(!flag)
	{
		cout << 0 << '\n';
	}
	else
	{
		vector<int> v;
		int l = 1, r = n;
		while(l < r)
		{
			while(l < r && a[l] == '0')l ++;
			while(l < r && a[r] == '1')r --;
			if(l < r)
			{
				v.push_back(l);
				v.push_back(r);
				l ++;
				r --;
			}
		}
		sort(v.begin(), v.end());
		cout << 1 << '\n' << v.size() << ' ';
		for(auto i : v)
		{
			cout << i << ' ';
		}
		cout << '\n';
	}
}
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t;
	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

题目描述3

Problem - C - Codeforces

题目分析

将10拆解成2和5,因为只有2 * 5可以拆解成10,如果少2就乘2或者少5就乘5,如果还可以继续就乘10,由于此时末尾都为0,故还可以乘到小于m的倍数

 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve()
{
	ll n, m;
	cin >> n >> m;
	ll k = 1;
	ll t = n;
	ll c2 = 0, c5 = 0;
	while(t % 2 == 0)t /= 2, c2 ++;
	while(t % 5 == 0)t /= 5, c5 ++;
	while(c2 < c5 && k * 2 <= m)k *= 2, c2 ++;
	while(c5 < c2 && k * 5 <= m)k *= 5, c5 ++;
	while(k * 10 <= m)k *= 10;
	cout << n * k * (m / k) << '\n';
}
int main()
{
	int t;
	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

题目描述4

Problem - D - Codeforces

题目分析 

对于此题主要是数的配对,我们将数都存入map将数组排序,从大到小来看每一个数,如果其数/x在map中还存在说明这两个数字可以配对,将这个数字以及可以和这个数配对的数字删除,如果说没有可以/x的数说明不能配对此时就需要添加数字用ans记录添加的个数

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
void solve()
{
	int ans = 0;
	int n, x;
	map<int, int> mp;
	int a[N];
	cin >> n >> x;
	for(int i = 1; i <= n; i ++)
	{
		cin >> a[i];
		mp[a[i]] ++;
	}
	sort(a + 1, a + 1 + n);
	for(int i = n; i >= 1; i --)
	{
		if(mp[a[i]])
		{
			if(a[i] % x == 0)
			{
				if(mp[a[i] / x] == 0)
				{
					ans ++;
					mp[a[i]] --;
				}
				else
				{
					mp[a[i]] --;
					mp[a[i] / x] --;
				}
			}
			else
			{
				mp[a[i]] --;
				ans ++;
			}
		}
	}
	cout << ans << '\n';
}
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t;
	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

题目描述5

Problem - E - Codeforces

题目分析

我们可以将每一列存在vector中进行计算,使用下方的区间模型将答案加入ans

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<vector<ll>> v;
void solve()
{
	int n, m, x;
	ll ans = 0;
	cin >> n >> m;
	v.clear();
	v.resize(m + 1);
	for(int i = 1; i <= n; i ++)
	{
		for(int j = 1; j <= m; j ++)
		{
			cin >> x;
			v[j].push_back(x);
		}
	}
	for(int i = 1; i <= m; i ++)
	{
		sort(v[i].begin(), v[i].end());
		for(int j = 1; j < n; j ++)
		{
			ans += 1ll * (v[i][j] - v[i][j - 1]) * j * (n - j);
		}
	}
	cout << ans << '\n';
}
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t;
	cin >> t;
	while(t --)
	{
		solve();
	} 
	return 0;
}

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

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

相关文章

如何在 Bash 脚本中添加注释

在 Bash 脚本中添加注释是保持代码整洁且易于理解的最有效方法之一。 你可能会问为什么。 假设你的脚本包含一个复杂的正则表达式或多个复杂的代码块&#xff0c;在这种情况下&#xff0c;你可以添加注释&#xff0c;以便其他开发人员或你可以了解该代码块的含义。 注释掉部…

【运维知识高级篇】超详细的Jenkins教程5(pipeline流水线配置+分布式构建)

CI/CD是持续集成&#xff0c;持续部署&#xff0c;集成就是开发人员通过自动化编译&#xff0c;发布&#xff0c;测试的手段集成软件&#xff0c;在开发的测试环境上测试发现自己的错误&#xff1b;持续部署是自动化构建&#xff0c;部署&#xff0c;通常也是在测试环境上进行&…

Android问题笔记 - NoSuchmethodException: could not find Fragment constructor

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

UiPath:一家由生成式AI驱动的流程自动化软件公司

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;UiPath(PATH)的股价并没有因为生成式AI的炒作而上涨&#xff0c;但很可能会成为主要受益者。 &#xff08;2&#xff09;即使在严峻的宏观环境下&#xff0c;UiPath的收入还在不…

实现Linux下Word转PDF、Java调用命令方式

使用 LibreOffice 实现 Word 转 PDF 和 Java 调用命令 1、 安装 LibreOffice 外网安装 # 一键安装 yum install -y libreoffice # 验证版本 libreoffice --version # Warning: -version is deprecated. Use --version instead. # LibreOffice 7.5.6.2 f654817fb68d6d4600d7…

深入理解 Python 虚拟机:进程、线程和协程

深入理解 Python 虚拟机&#xff1a;进程、线程和协程 在本篇文章当中深入分析在 Python 当中 进程、线程和协程的区别&#xff0c;这三个概念会让人非常迷惑。如果没有深入了解这三者的实现原理&#xff0c;只是看一些文字说明&#xff0c;也很难理解。在本篇文章当中我们将通…

智慧图书馆视频监控系统方案——助力图书信息化管理

图书馆的藏书一般都是较为宝贵和珍重的&#xff0c;但图书馆的读者较多且复杂&#xff0c;为保护十分珍贵的图书资源&#xff0c;防止图书馆图书的丢失和损坏&#xff0c;TSINGSEE青犀智能视频监控系统应运而生。 1、视频监控系统 安装高清摄像头覆盖图书馆内的关键区域&#…

PMP考试中的常见翻译问题

1、题目中出现的“启动会议”或“启动大会”开工会议&#xff08;kick-off meeting) 2、题目中出现的“回报期” 回收期&#xff08;项目选择的经济模型&#xff09; 3、题目中出现的“增强” 提高&#xff08;风险应对策略&#xff09; 4、题目中出现的“缓解” 减轻&#…

电源模块直流稳压电源不知道如何调试?纳米软件为您科普

调试是一个查错和排错的过程。电源模块调试就是在正常使用之前先通过调试检测其是否存在一些故障&#xff0c;确保在后期使用中整个电路可以稳定运行。直流稳压电源是常用的一种电源供应装置&#xff0c;今天纳米软件将介绍直流稳压电源调试方法。 直流稳压电源调试步骤 稳定直…

29 “select *“ 或者 “select field1, field2“ 的实现

前言 这里我们来探究一下 “select *” 或者 “select 字段列表“ 的相关实现 当然 这一部分在 “mysql union” 里面有具体的体现, 只是 可能没有那么细致 这里 来概览一下 这里的整个流程 select * from tz_test; setup_wild 的地方是处理 “select *” 的地方 外层迭代…

从北京到南京:偶数在能源行业的数据迁移实践

能源行业的数字化转型 当前&#xff0c;大数据技术在以电力为代表的能源行业不断推进&#xff0c;同时&#xff0c;分布式能源、储能、电网技术不断改进&#xff0c;电力行业的数字化转型充满了机遇和挑战。 一方面&#xff0c;电力行业本身自动化程度高、信息化基础好、系统…

去水印app有哪些?这三款良心推荐

如今图片的使用越来越普遍&#xff0c;因此我们经常需要对图片进行编辑和修改。但有些图片可能带有水印&#xff0c;这会影响图片的美观和应用效果。你知道有哪些推荐的图片去水印app吗&#xff1f;以下是介绍的三款可以去水印app&#xff0c;让你的素材更加专业和美观&#xf…

Python高频面试题——如何在字符串中删除指定字符,掌握strip()、replace()和re.sub ()正确使用方法!

关于python删除字符串是面试python测试开发工程师的一个经典问题。问题很简单&#xff0c;但是一下子就能测试出来被面试者是否能够熟练的进行python相关编码工作&#xff01; 对于有些临时抱佛脚的同学来讲&#xff0c;一看删除&#xff0c;很自然就说用remove 、del相关方法…

优化销售策略,突破企业全面预算管理难题

传统的企业年度销售计划往往会消耗企业内部人员很多精力和时间&#xff0c;比如需要收集数据、处理电子表格、确定项目优先级、预测未来发展以及为次年的费用制定预算等。然而随着这些繁琐的工作不断进行&#xff0c;其中的准确性和价值也受到了一定的怀疑。虽然销售计划仍按着…

经纬恒润推出全新一代智能电动座椅模块

随着智能驾驶、智能座舱的广泛应用&#xff0c;人们对于汽车的定位不再局限于代步工具&#xff0c;对于汽车座舱这个私密空间也有了不一样的期待。更安全、更舒适、更智能化的体验将成为未来智能座椅的发展方向&#xff0c;而传统的座椅控制系统已无法满足人们新的需求。 为了…

python3 win环境部署

python3 win环境部署 1.安装包 https://www.python.org/ftp/python/3.12.0/python-3.12.0-amd64.exe安装成功后 ctrlr 输入 cmd 执行 python 检验是否安装成功 pip 镜像源更新 查看pip.ini 文件路径,一般在 python 安装目录下添加 pip.ini 文件即可 pip -v config list​ 创建…

JAVA---RMI详解1

一、RMI简介 The Java Remote Method Invocation (RMI)允许运行在一台虚拟机上的对象调用运行在另一台虚拟机上的对象中的方法。RMI使用stubs and skeletons &#xff08;存根和骨架&#xff09;架构来和远程对象&#xff08;Remote Object&#xff09;沟通 二、相关术语介绍 1…

人脸写真FaceChain风格写真的试玩(二)

接着上一篇【人脸写真FaceChain的简单部署记录&#xff08;一&#xff09;】来试玩一下。 1 无限风格写真 参考&#xff1a;让你拥有专属且万能的AI摄影师AI修图师——FaceChain迎来最大版本更新 1.1 人物形象训练 这里的步骤比较简单&#xff0c;就是选择照片&#xff0c;然…

CentOS7.9离线安装Docker环境

1. 下载合适的Docker安装包 Docker安装包下载地址&#xff1a;Index of linux/static/stable/x86_64/https://download.docker.com/linux/static/stable/x86_64/ 进入地址页面&#xff0c;如下图&#xff1a; 我下载的是&#xff1a;docker-23.0.1.tgz 版本 2. 将下载好的Do…

linux-守护进程daemon

linux-守护进程daemon 代码实现 main.c运行结果 代码实现 main.c //pName&#xff1a;程序名 //facility&#xff1a; 守护进程&#xff0c;输出日志类型 302页 #include<signal.h> #include<syslog.h> #include<fcntl.h> static int daemon_proc 0; #defin…