思维训练1

news2024/11/25 21:05:29

题目描述2

Problem - A - Codeforces 

题目分析 

思路一:

由于是连续的数,我们可以使用f1, f2, f3来记录连续数的开头数字,只可能有三种情况

①开头数为第一个数-1

②开头数为第一个数

③开头数为第一个数+1

分别观察这三个情况,如果都不符合要求说明此只能记为NO

如果这三种情况有一种符号就记为YES

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
void solve()
{
	int flag1 = 0, flag2 = 0, flag3 = 0;
	ll n, a[N];
	cin >> n;
	cin >> a[1];
	ll f1 = a[1];
	ll f2 = a[1] - 1;
	ll f3 = a[1] + 1;
	for(int i = 2; i <= n; i ++)
	{
		cin >> a[i];
	}
	for(int i = 1; i <= n; i ++)
	{
		if(f1 <= a[i] + 1 && f1 >= a[i] - 1)
		{
			f1 ++;
		}
		else 
		{
			flag1 = 1;
		}
	}
	for(int i = 1; i <= n; i ++)
	{
		if(f2 <= a[i] + 1 && f2 >= a[i] - 1)
		{
			f2 ++;
		}
		else 
		{
			flag2 = 1;
		}
	}
	for(int i = 1; i <= n; i ++)
	{
		if(f3 <= a[i] + 1 && f3 >= a[i] - 1)
		{
			f3 ++;
		}
		else 
		{
			flag3 = 1;
		}
	}
	if(flag1 == 1 && flag2 == 1 && flag3 == 1)cout << "NO" << '\n';
	else cout << "YES" << '\n';
	return;
}
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); 
	int t;
	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

思路二:

由于是连续的一段,所以只能连续往左移或者连续往右移,最左边的只能向右移,最右边的只能向左移(这两个数的移动可以改变中间的空隙的大小,故最多空隙大小不能大于2)对于中间的数无论是向左移还是向右移都不能改变其真正中间空隙的大小

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
void solve()
{
	int n, a[N];
	int cnt = 0;
	cin >> n;
	for(int i = 1; i <= n; i ++)
	{
		cin >> a[i];
	}
	for(int i = 2; i <= n; i ++)
	{
		cnt += a[i] - a[i - 1] - 1;
	}
	if(cnt > 2)cout << "NO" << '\n';
	else cout << "YES" << '\n';
}
int main()
{
	int t;
	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

题目描述2

Problem - B - Codeforces

 题目分析

我们可以假象使用一个数组c来描述了操作的情况,

ci < 0 表示 ci = -k * ai,也就是经行了k次的减ai的操作,

ci > 0 表示 ci = k * ai,也就是经行了k次的加ai的操作

ci = 0 表示没有经行任何的操作

我们发现操作一定是先减后加的为了使用最少的操作,也就是k最小,其中先减后加的操作中必有一个操作为0步,我们可以从每一步开始一一枚举为0的操作,最后从这个位置分别向左和向右计算出整个c数组,最后找出最小的操作即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5e5 + 10;
ll a[N], b[N], n;
int main()
{
	ll ans = 8e18;
	cin >> n;
	for(ll i = 1; i <= n; i ++)cin >> a[i];
	for(ll i = 1; i <= n; i ++)
	{	
		ll cnt = 0;
		memset(b, 0, sizeof b);	
		for(ll j = i - 1; j >= 1; j --)//向左 
		{
			ll k = 1 - b[j + 1] / a[j];
			b[j] = - k * a[j];
			cnt += k;
		}
		for(ll j = i + 1; j <= n; j ++)//向右 
		{
			ll k = 1 + b[j - 1] / a[j];
			b[j] = k * a[j];
			cnt += k;
		}
		ans = min(ans, cnt);
	}
	cout << ans;
	return 0;
}

题目描述3

Problem - C - Codeforces

 题目分析

 对于带有绝对值的,我们首先需要想到去掉绝对值或者说确定这个绝对值所代数的具体的正负号,对于构造问题,我们可以考虑顺序,逆序跳序

我们先思考顺序:12 34 56 78

这样由于第一部分全部为负,故我们逆序思考

87 65 43 21

通过上图我们发现在逆序过后每颠倒两个数就会多一个2,故序列得以构造

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, k, a[N];
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> n >> k;
	n = n * 2;
	for(int i = 1; i <= n; i ++)a[i] = n - i + 1;
	for(int i = 1; i <= k; i ++)swap(a[2 * i], a[2 * i - 1]);
	for(int i = 1; i <= n; i ++)cout << a[i] << ' ';
	return 0;
}

题目描述4

Problem - D - Codeforces

题目分析 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e7 + 10, inf = 2e9;
int minp[N];
void euler(ll n)
{
	bitset<N>vis;	
	vector<ll> primes;
	vis[0] = vis[1] = true;
	minp[1] = 1;
	for(ll i = 2; i <= n; i ++)
	{
		if(!vis[i])primes.push_back(i),minp[i] = i;
		for(int j = 0; j < primes.size() && i * primes[j] <= n; j ++)
		{
			vis[i * primes[j]] = true;
			minp[i * primes[j]] = primes[j];
			if(i % primes[j] == 0)break;
		} 
	}
}
void solve()
{
	ll x, y;
	cin >> x >> y;
	if(y - x == 1)cout << -1 << '\n';
	else
	{
		ll ans = inf;
		y-= x;
		while(y > 1)
		{
			ll p = minp[y];
			ans = min(ans, ((-x) % p + p) % p);
			while(y % p == 0)y /= p;
		}
		cout << ans << '\n';
	}
}
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); 
	int t;
	euler(1e7);
	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

题目描述5

Problem - A - Codeforces

 题目分析

对于此题意是删除左右两端连续的串,使留下的0以及删除的1最大值最小最终只剩下一部分,我们可以使用双指针来枚举这一部分,c0 : 保留下来0的个数, c1 : 删除掉的1的个数,枚举左端点,当c0 == c1时右端点确定

 在这两个数发生变化的时候一方变化,另一方必定不变,故一定会出现相交的点此点即为答案,找出最小的即可

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
char s[N];
void solve()
{
	int c1 = 0, c0 = 0, ans = 3e5 + 10;
	cin >> s + 1;
	int n = strlen(s + 1);
	for(int i = 1; i <= n; i ++)if(s[i] == '1')c1 ++;
	for(int i = 1, j = 0; i <= n; i ++)
	{
		while(j + 1 <= n && c0 < c1)
		{
			j ++;
			if(s[j] == '0')c0 ++;
			else c1 --;
		}
		ans = min(ans, max(c1, c0));
		if(s[i] == '1')c1 ++;
		else c0 --;
	}
	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/1101031.html

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

相关文章

osWorkflow-1——osWorkflow官网例子部署启动简单使用(版本:OSWorkflow-2.8.0)

osWorkflow-1——osWorkflow官网例子部署启动简单使用&#xff08;版本&#xff1a;OSWorkflow-2.8.0&#xff09; 1. 前言——准备工作1.1 下载相关资料1.2 安装翻译插件 2. 开始搞项目2.1 解压 .zip文件2.2 简单小测&#xff08;war包放入tomcat&#xff09;2.3 导入项目到 I…

2023年信息科学与工程学院学生科协第一次软件培训

2023年信息科学与工程学院学生科协第一次软件培训 文章目录 2023年信息科学与工程学院学生科协第一次软件培训运行第一个代码&#xff08;“Hello World&#xff01;”&#xff09;初识C语言代码的具体结构头文件(主)函数 输入与输出scanf函数printf函数转义字符 变量的定义进一…

如何选择全面型企业备份软件以提高数据可用性?

通常&#xff0c;备份数据是指服务器正在运行的工作负载所需的所有数据。这可以包括文档、媒体文件、配置文件、机器映像、操作系统和注册表文件。本质上&#xff0c;您想要保留的任何数据都可以存储为备份数据。 在日益数字化的商业环境中&#xff0c;数据备份对于组织的生存…

C语言复杂表达式与指针高级

一、指针数组与数组指针 1.指针数组VS数组指针 &#xff08;1&#xff09;指针数组&#xff1a;实质是一个数组&#xff0c;因为这个数组中传参的内容全部是指针变量。 &#xff08;2&#xff09;数组指针&#xff1a;实质是一个指针&#xff0c;这个指针指向一个数组 2.分析指…

C语言,打印指定大小的X

要打印一个X&#xff0c;无非是在一个二维数组一个矩形中操作&#xff0c;将不是X的部分赋值为空格字符&#xff0c;将是X部分打印为*字符。 矩形的边长就是输入的n&#xff0c;由于矩形的边长是不固定的&#xff0c;所以要找到应该被赋值为*的坐标之间有什么数学关系。 以矩…

宏电股份AI BOX新产品首次亮相2023中国移动全球合作伙伴大会,以创新性AI、5G技术推动数实共生

10月11-13日&#xff0c;2023中国移动全球合作伙伴大会在广州开幕&#xff0c;本次大会以“算启新程&#xff0c;智享未来”为主题&#xff0c;作为中国移动多年来的重要合作伙伴&#xff0c;宏电股份AI BOX新产品在大会上首次精彩亮相&#xff0c;并重点展示了5G Redcap工业智…

格雷码加相移三维重建

之前所做的三维重建系统基本上都是基于多频率外差 的方法 &#xff08;交流方式可以点这个链接&#xff09;&#xff0c;最近整理了一下格雷码加相移的算法&#xff0c;与多频外差相比格雷码在对反光物体的重建效果稍微好一点&#xff0c;也可以投诉更少的图像 。采用6介互补格…

Python使用Selenium库如何绕过Cloudflare验证,网页请确认你是不是机器人

大家好&#xff0c;我是淘小白~ 前段时间使用selenium库写chatGPT的脚本&#xff0c;遇到过一个问题&#xff0c;那就是cloudflare的机器验证&#xff0c;让你点击确认不是机器人&#xff0c;这个问题最后找人解决掉了&#xff0c;我也是百度了很久没找到答案&#xff0c;B站找…

053:mapboxGL中sources的6种类型及各类型的示例代码

第053个 点击查看专栏目录 本篇文章是mapbox的source的归纳总结。 mapbox中 sources 是什么 sources:数据源集合(必填,用于包含一系列数据源 source,这些数据源提供了在地图上显示的数据) sources 是对象 {} 的形式,其属性名就是 数据源的名称(或者说 数据源的 id),…

网络基础初谈

0.一些无关紧要的心里话 ​ 一转眼学习计算机知识已经一年多了&#xff0c;中间起起伏伏&#xff0c;断断续续&#xff0c;但还算好也是坚持到了今天&#xff0c;之所以把这些基础知识写成一个系列&#xff0c;一方面方便知识巩固&#xff0c;另一方面至少还有三三两两的几个朋…

Linux命令之chpasswd命令

一、chpasswd命令简介 chpasswd命令用于同时更改多个用户的密码。它可以从标准输入或指定的文件中读取用户名和密码的组合&#xff0c;并将其应用于系统中的用户。chpasswd命令通常用于批量更改用户密码&#xff0c;特别是在自动化脚本或批处理任务中&#xff0c;该命令需要roo…

ERP系统供应商协同:优化企业供应链管理

一、ERP系统供应商协同的概念和功能 供应商协同是指在供应链中&#xff0c;企业与供应商之间通过ERP系统进行紧密合作和信息共享&#xff0c;实现供应链各个环节的协调和优化。ERP系统供应商协同功能涉及以下方面&#xff1a; 1. 供应商管理&#xff1a;ERP系统提供完善的供应…

华为云云耀云服务器L实例评测|windows系统3389防爆破之安全加固教程

为什么要选择华为云云耀云服务器L实例&#xff1a; 华为云在全国范围内建立了多个数据中心&#xff0c;这些数据中心之间相互冗余&#xff0c;以确保高可靠性和可用性&#xff0c;用户可以选择最适合的区域来部署应用程序&#xff0c;以实现更好的性能和延迟。 相对于传统的物…

选择什么电容笔比较好?平板手写笔推荐

由于苹果Pencil的热销&#xff0c;让华国内市场上&#xff0c;也出现了不少的平替式电容笔&#xff0c;这些产品&#xff0c;有好有坏&#xff0c;价格也很公道。不过&#xff0c;也有很多产品的价格都很平价。我是一个拥有多年经验的数码发烧友&#xff0c;在前几年就开始用上…

docker安装和docker安装RabbitMQ

docker安装 执行命令&#xff0c;先查看是否有Docker docker --version 如果想要删除&#xff1a;yum -y remove docker-ce 如果没有需要安装&#xff1a; 1.执行命令&#xff0c;实现Docker安装 yum install -y yum-utils yum-config-manager --add-repo http://mirrors.…

数组模拟堆实现堆排序

文章目录 QuestionIdeasCode Question 输入一个长度为 n 的整数数列&#xff0c;从小到大输出前 m 小的数。 输入格式 第一行包含整数 n 和 m 。 第二行包含 n 个整数&#xff0c;表示整数数列。 输出格式 共一行&#xff0c;包含 m 个整数&#xff0c;表示整数数列中前 m …

如何选择安全可靠的跨网文件安全交换一体机?

各行各业为了保护核心数据&#xff0c;绝大多数企业采取的第一个步骤是将企业内网与互联网进行隔离&#xff0c;将内部数据“困在”内网&#xff0c;同时也能够有效屏蔽外部网络攻击的风险。较大规模的企业&#xff0c;比如金融、政府、集成电路等行业机构&#xff0c;还可能对…

UE5----使用C++的项目重新打开后东西丢失

最近开始学习c编写代码&#xff0c;发现在场景里放置了Actor后&#xff0c;第二天打开项目&#xff0c;场景里边的放的球啊啥的东西没有了&#xff0c;蓝图类也丢失了父类。 解决方案&#xff1a; 不在Epic里打开虚幻引擎&#xff0c;在VS中打开。点击这个小绿三角&#xff0…

河北吉力宝:多维发力走创新智能鞋业道路

在快速发展的时代潮流中&#xff0c;智能科技正在改变我们的生活方式&#xff0c;消费者的选择更加多元化&#xff0c;以及制鞋行业同质化竞争严重等多重不利因素的影响&#xff0c;我国制鞋行业竞争加剧&#xff0c;各制鞋企业也在不断探索新市场&#xff0c;进一步拓展市场空…

京东数据分析:2023年下半年母婴市场各大细分赛道消费趋势盘点!

于今天的新生代父母而言&#xff0c;在诸多消费观念被改变的当下&#xff0c;新生父母们在育儿上更强调精细化&#xff0c;在这种情况下&#xff0c;母婴市场的消费升级已是大势所趋。不过&#xff0c;在如今收入增速整体放缓的背景下&#xff0c;各细分赛道的消费升级都出现了…