思维训练3

news2024/11/28 22:55:12

题目描述1

Problem - A - Codeforces

题目分析

样例1解释:

对于此题,我们采用贪心的想法,从1到n块数越少越好,故刚好符合最少的块数即可,由于第1块与第n块是我们必须要走的路,所以我们可以根据这两块砖的颜色进行分类判断。

如果这两块砖是一样的颜色,我们只需要判断这两块砖算上中间的颜色的总块数是否>=k即可。

如果这两块砖是不一样的颜色,我们需要分别从两端观察前面这部分的砖和后面这部分砖可以走的相同的颜色是否>=k即可

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
void solve()
{
	int n, k, c[N];
	cin >> n >> k;
	for(int i = 1; i <= n; i ++)cin >> c[i];
	if(c[1] == c[n])
	{
		int cnt = 0;
		for(int i = 2; i <= n - 1; i ++)
		{
			if(c[i] == c[1])cnt ++;	
		}
		if(cnt >= k - 2)cout << "YES" << '\n';
		else cout << "NO" << '\n';
	}
	else 
	{
		int l = n, r = 1,kl = 0, kr = 0;
		for(int i = 1; i <= n && kl < k; i ++)
		{
			if(c[i] == c[1])
			{
				kl ++;
				l = i;
			}
		}
		for(int i = n; i >= 1 && kr < k; i --)
		{
			if(c[i] == c[n])
			{
				kr ++;
				r = i;
			}
		}
		if(kl == k && kr == k && l < r)cout << "YES" << '\n';
		else cout << "NO" << '\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

题目样例示意:

注意:找出的是排列也就是说数字不能重复,而且所有的数从小到大排序之后一定为连续的。

思考:什么是好区间?

包含1但是不包含2的区间(2)

包含1,2但是不包含3的区间(3)

包含1,3但是不包含2的区间(2)

为了使这样的区间尽可能多

我们可以进行一个构造,题目要求在所有的区间中尽量使所有的素数结果最多我们可以将2和3放在两边,将1放在中间,这样中间的大部分经过了1,但是未到达两边的2,3区间都是有贡献的,或者经过了1,2,但是没经过3的也是有贡献的,或者经过了1,3但是没经过2的也有贡献。

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int a[N], n;
void solve()
{
	cin >> n;
	a[1] = 3, a[n] = 2;
	int x = (n + 1) / 2;
	a[x] = 1;
	int k = 3;
	for(int i = 2; i < x; i ++)
	{
		k ++;
		a[i] = k;	
	} 
	for(int i = x + 1; i < n; i ++)
	{
		k ++;
		a[i] = k;
	}
	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;
}

题目描述3 

Problem - C - Codeforces

题目分析

此题我们需要掌握缩点的思想。

缩点:连续相同的字符变成一个字符即可

eg.00011110001011缩点成010101

需要不降序排列故左边0多好,"?"挨着哪个数就缩成哪个数,如果左右两边的数不一样就统一先按左边来缩数

#include<bits/stdc++.h>
using namespace std;
void solve()
{
	string s ;
	cin >> s;
	int n = s.size() ;
	for(int i = 0; i < n; i ++)
	{
		if(i != 0 && s[i] == '?')
		{
			s[i] = s[i - 1];		
		}	
		else if(i == 0 && s[i] == '?')s[i] = '0';
	}		
	cout << s << '\n';
}
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int t;
	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

题目描述4

Problem - D - Codeforces

题目分析 

由上图可知变化一次必然会进行一次颜色的翻转

R表示数字不同的一列,B表示数字相同的一列

故要么是全R要么是全B才能到达一个全B的终点

一次操作到全R两次操作就会回到全B,故我们需要进行操作绑定

两两配对操作会使得除了这两个数之外的所有数都不发生变化(操作绑定)

但是如果剩下一个数没有配对时,可以进行如图右下角的方法计算

将需要改变的1存入vector中,并将其中的不能配对的奇数的1单独取出计算,剩下的进行配对即可

注:若取出的数的位置不在1时就可以改变(1, x - 1),(1, x)

若取出的数的位置在1时就可以改变(x, n)(x + 1, n)

#include<bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
typedef pair<int, int> PII; 
void solve()
{
	char a[N], b[N];
	int n;
	vector<PII> ans;
	vector<int> pos;
	cin >> n;
	cin >> a + 1 >> b + 1;
	bool flag1 = 0, flag2 = 0;
	for(int i = 1; i <= n; i ++)
	{
		if(a[i] == b[i])flag1 = 1;
		else flag2 = 1;
	}
	if(flag1 && flag2)
	{
		cout << "NO" << '\n';
		return;
	}
	if(flag2)//如果全是不相同的字符
	{
		ans.push_back({1, n});
		for(int i = 1; i <= n; i ++)
		{
			if(a[i] == '0')a[i] = '1';
			else a[i] = '0';
		}
	}
	for(int i = 1; i <= n; i ++)
	{
		if(a[i] == '1')pos.push_back(i);
	}
	if(pos.size() & 1)
	{
		int x = pos.back();
		if(x == 1)
		{
			ans.push_back({x, n});
			ans.push_back({x + 1, n});
		}
		else
		{
			ans.push_back({1, x - 1});
			ans.push_back({1, x});
		}
		pos.pop_back();
	}
	for(auto i : pos)ans.push_back({i, i});
	cout << "YES" << '\n' << ans.size() << '\n';
	for(auto i : ans)
	{
		cout << i.first << ' ' << i.second << '\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

题目分析

此题相当于找规律,从最大的数开始看起,第一个大于等于(n - 1)的平方数就是此处可以组成的平方数,发现会有连续的一段的平方数一样,判断限制条件,如果条件不满足就循环改数使其满足条件。

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int a[N];
void solve()
{
	bitset<N> vis;
	int n;
	cin >> n;
	int y = 0;
	while(y * y < n - 1)y ++;
	for(int i = n - 1; i >= 0; i --)
	{
		while(y * y - i >= n || vis[y * y - i])y --;
		a[i] = y * y - i;
		vis[a[i]] = true;
	}
	for(int i = 0; i < n; i ++)
	{
		cout << a[i] << ' ';
	}
	cout << '\n';
}
int main()
{
	int t;
	cin >> t;
	while(t --)
	{
		solve();
	}
	return 0;
}

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

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

相关文章

leetcode 117

leetcode 117 代码 #include <iostream>// Definition for a Node. class Node { public:int val;Node* left;Node* right;Node* next;Node() : val(0), left(NULL), right(NULL), next(NULL) {}Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}No…

【Linux进阶之路】进程(下)—— 进程控制

文章目录 前言一.再识fork1.为啥有两个返回值&#xff1f;2.为啥给父进程返回子进程的pid&#xff0c;给子进程返回0&#xff1f;3.为啥返回的同一个变量&#xff0c;地址相同&#xff0c;但值不同&#xff1f; 二.进程退出1.退出情况1.1正常退出&#xff0c;退出码正常1.2正常…

【漏洞库】XXL-JOB 默认accessToken权限绕过导致RCE

文章目录 漏洞描述漏洞编号漏洞评级影响版本漏洞复现- EXP 编写 漏洞挖掘修复建议 漏洞描述 XXL-JOB 是一款开源的分布式任务调度平台&#xff0c;用于实现大规模任务的调度和执行。 XXL-JOB 默认配置下&#xff0c;用于调度通讯的 accessToken 不是随机生成的&#xff0c;而…

基于SpringBoot+Vue的旅游系统、前后端分离

博主24h在线&#xff0c;想要源码文档部署视频直接私聊&#xff0c;低价有偿&#xff01; 基于SpringBootVue的旅游系统、前后端分离 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI 工具&#xff1a;IDEA/Ec…

微信怎么设置自动通过好友申请?

当开展引流获客活动时&#xff0c;员工会在一段时间内频繁收到好友添加的申请&#xff0c;手动同意好友请求费时费力还容易出现漏加的情况&#xff0c;那么微信能自动通过好友请求吗&#xff1f; 如何设置快速自动通过好友申请呢&#xff1f; 当微信号在系统登录&#xff0c;…

【计算机网络】网络层:数据平面

一.网络层概述 每台路由器的数据平面的主要功能时从其输入链路向其输出链路转发数据报&#xff0c;控制平面的主要功能是协调这些本地的每路由转发动作&#xff0c;使得数据报沿着源和目的地主机之间的路由器路径最终进行端到端传送。 网络层不运行运输层和应用层协议。 转发是…

【QT】绘图设备

绘图设备是指继承QPainterDevice的子类。Qt提供了很多这样的类&#xff0c;例如QPixmap、QBitmap、QImage和 QPicture。其中&#xff0c; QPixmap专门为图像在屏幕上的显示做了优化QBitmap是QPixmap的一个子类&#xff0c;它的色深限定为1&#xff0c;可以使用 QPixmap的isQBi…

安徽省黄山景区免9天门票为哪般?

今日浑浑噩噩地睡了大半天&#xff0c;强撑起身子写网文......可是&#xff0c;题材不好选&#xff0c;本“人民体验官”只得推广人民日报官方微博文化产品《这两个月“黄山每周三免门票”》。 图&#xff1a;来源“人民体验官”推广平台 因年事渐高&#xff0c;又有未愈的呼吸…

麒麟KYLINIOS软件仓库搭建02-软件仓库添加新的软件包

原文链接&#xff1a;麒麟KYLINIOS软件仓库搭建02-软件仓库添加新的软件包 hello&#xff0c;大家好啊&#xff0c;今天给大家带来麒麟桌面操作系统软件仓库搭建的文章02-软件仓库添加新的软件包&#xff0c;本篇文章主要给大家介绍了如何在麒麟桌面操作系统2203-x86版本上&…

改进YOLOv5 | 头部解耦 | 将YOLOX解耦头添加到YOLOv5 | 涨点杀器

改进YOLOv5 | 头部解耦 | 将YOLOX解耦头添加到YOLOv5 论文地址:https://arxiv.org/abs/2107.08430 文章目录 改进YOLOv5 | 头部解耦 | 将YOLOX解耦头添加到YOLOv51. 解耦头原理2. 解耦头对收敛速度的影响3. 解耦头对精度的影响4. 代码改进方式第一步第二步第三步第四步第五步本…

0-1背包 完全背包 + 至多/恰好/至少 + 空间优化 + 常见变形题

# capacity:背包容量 # w[i]: 第 i 个物品的体积 # v[i]: 第 i 个物品的价值 # 返回:所选物品体积和不超过 capacity 的前提下&#xff0c;所能得到的最大价值和 def zero_one_knapsack(capacity:int,w:List[int],v:List[int]) -> int:n len(w)cache #记忆化搜索 def dfs(i…

吴恩达《机器学习》4-6->4-7:正规方程

一、正规方程基本思想 正规方程是一种通过数学推导来求解线性回归参数的方法&#xff0c;它通过最小化代价函数来找到最优参数。 代价函数 J(θ) 用于度量模型预测值与实际值之间的误差&#xff0c;通常采用均方误差。 二、步骤 准备数据集&#xff0c;包括特征矩阵 X 和目标…

使用C# 编写VISA相关的代码控制 keysight 34461A万用表

使用C# 编写VISA相关的代码控制 keysight 34461A万用表 1. 获取设备2. 开始编程2.1 创建项目2.2 编程2.3 全部工程代码 软件控制仪器仪表的教程在网上相对比较少&#xff0c;都是一段一段的代码&#xff0c;没有从头开始带初学者来进行操作的一个完整流程&#xff0c;整个方案难…

Unity中Shader的GI相关数据的准备

文章目录 前言一、把 Unity 中用到的 GI 的函数移植到我们自定义的 cginc 文件中二、开始使用和 GI 相关的方法1、了解 UnityGI 结构体的内容,并且准备 UnityGI 的数据2、了解 SurfaceOutput 结构体&#xff0c;并且准备数据3、了解并准备 UnityGIInput 结构体&#xff0c;并且…

Flutter笔记:发布一个模块 scale_design - (移动端)设计师尺寸适配工具

Flutter笔记 发布一个模块scale_design设计师尺寸适配工具与常用组件库 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/a…

词向量模型Word2Vec

Word2Vec CBOW连续词袋模型例子CBOW模型的embeddings层CBOW模型的线性层 总结 skip-gram跳字模型例子Skip-Gram模型的结构 CBOW和skip-gram的目标都是迭代出词向量字典&#xff08;嵌入矩阵&#xff09;——embeddings CBOW连续词袋模型 根据上下文词汇预测目标词汇 例子 使…

【FastCAE源码阅读3】几何模型显示:从OCC对象到VTK对象

从几何到显示还是比较麻烦的&#xff0c;需要将几何对象转换成渲染对象&#xff0c;涉及几何建模、面的三角化、图形渲染等学科&#xff0c;阅读本文需了解一些基本的OCC、VTK编程 一、几何体显示基本流程 FastCAE几何内核使用的是OCC&#xff0c;显示渲染用的VTK&#xff0c;…

Leetcode—111.二叉树的最小深度【简单】

2023每日刷题&#xff08;十八&#xff09; Leetcode—111.二叉树的最小深度 DFS实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ int minDepth(struct TreeNode* root…

NCL颜色索引表---全平台可用

NCL颜色索引表—全平台可用

三维向量旋转

三维向量旋转 问题描述问题分析 v ⃗ ∣ ∣ \vec{v}_{||} v ∣∣​的旋转 v ⃗ ⊥ \vec{v}_{\bot} v ⊥​的旋转 v ⃗ \vec{v} v 的旋转结论致谢 问题描述 如图1所示&#xff0c;设一个向量 v ⃗ \vec{v} v 绕另一个向量 u ⃗ [ x , y , z ] T \vec{u}[x,y,z]^{T} u [x,y,z]T…