6月2日上午思维训练题解

news2025/6/6 0:10:20

在这里插入图片描述

好好反思一下,自己在学什么,自己怎么在做训练赛的,真有这么难吗 ?????

A - Need More Arrays 题解

想尽可能多的拆出新数组的个数,只需要从原本的数组中提取出最长的一段上升序列即可。
让这个序列内的数字都满足 前一项+1<当前项 统计答案就行了

#include<bits/stdc++.h>
using namespace std;
int A[200005];
int main(){//抄代码者立马开除
	int t;
	cin>>t;
	while(t--){
		int n;
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>A[i];
		}
		int cnt=1;
		int pre=A[1];
		for(int i=2;i<=n;i++){
			while(pre+1>=A[i]&&i<=n){
				i++;
			}
			//结束的时候说明  pre+1<A[i] 或者结束了
			if(i<=n){
				cnt++;
				pre=A[i];
			} 
		}
		cout<<cnt<<'\n';
	}
	return 0;
} 

B - Not Quite a Palindromic String

这是一个构造题,如何思考呢?不难发现其实是要构造一段回文字符串再拼一些不能回文的地方。
我们可以思考一下,假设 S S S是整个最终字符串的某一段,且 S S S恰好是 K K K对回文索引构成的。那么你要把原本剩余的所有符号,拿去继续拼字符串且不能出现任何回文,只能是01,01 一对一对地抵消。

所以,这个题,我们需要 N / 2 − K N/2-K N/2K 对 多余的0,1来完成“不回文的构造”,剩余的所有0,1的对数,只需要恰好是K对就行了 。

#include<bits/stdc++.h>
using namespace std;
char A[200005];
int main(){
	int t;
	cin>>t;
	while(t--){
		int n,k;
		cin>>n>>k;
		cin>>A+1;
		int a=0,b=0;
		for(int i=1;i<=n;i++){
			if(A[i]=='0')a++;
			else b++;
		}
		a=a-(n/2-k);
		b=b-(n/2-k);	
	   //  n/2-k 匹配不相等
		if(a>=0&&b>=0&&a/2+b/2==k){
			cout<<"YES"<<'\n';
		} 
		  else{
		  	cout<<"NO"<<'\n';
		  }
	}
	return 0;
}

C - Square Year

枚举就行了,注意给定的年份是四位数,所以至多枚举a从0到100,b从0到100 求出一个解就行了

当然还有一种思路,能构成出来一定是平方数,我们设置为 ( 0 + 算术平方根 ) 2 (0+算术平方根)^2 (0+算术平方根)2 就行了 相当于检查年份是不是一个 平方数

有同学可能会问,输入进来0001 明明是字符串呀,实际上这个东西按整数类型输入进来就是1 前导0是没多大意义的

如何检查年份是不是平方数? 只需要对年份开根号之后,向上,向下取整,如果结果一样 那就是平方数

#include<bits/stdc++.h>
using namespace std;
int main(){
	int t;
	cin>>t;
	while(t--){
		int n;
		cin>>n;
		double q=sqrt(n);
		if(ceil(q)==floor(q)){
			cout<<0<<" "<<q<<'\n';
		}
		else{
			cout<<-1<<'\n';
		}
	}
	return 0;
}

D - Fashionable Array

直接双重循环,一个枚举左边,一个枚举右边,检查他们加起来是不是偶数就行了。如何是偶数,保存一下答案。

当然,同学们,思考一下,如果这个题N变得比较大 10 5 10^5 105该怎么做??指不定李老师下次就出题来考考大家了

#include<bits/stdc++.h>
using namespace std;
int A[200005];
int main(){
	int t;
	cin>>t;
	while(t--){
		int n;
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>A[i];
		}
		sort(A+1,A+1+n);
		int ans=9999;
		for(int i=1;i<=n;i++){
			for(int j=n;j>=i;j--){
				if((A[i]+A[j])%2==0){
					ans=min(ans,i-1+n-j);
				}
			}
		}	
		
		cout<<ans<<'\n';
	}
	return 0;
}

E - Down with Brackets

找找规律我们会发现,如果整个字符串的括号序列是完全由最外面一个括号包含的,那么无解,大家可以自己草稿上画一下,观察一下

必须出现两个及以上,独立的最外层括号,才能是YES,对着样例自己理解一下吧

如何检查这个括号呢?我们定义L 来记录当前左括号的数量,当然遇到右括号的时候肯定要抵消一个左括号

如果当我们的左括号个数被抵消的时候,且被抵消为0 了,说明一个最外层大括号 被消灭了。如果后续还会有左括号被扫进来 ,那么说明这是另外一个独立的括号

#include<bits/stdc++.h>
using namespace std;
char A[200005];
int main(){
	int t;
	cin>>t;
	while(t--){
		cin>>A+1;
		int len=strlen(A+1);
		int L=0;
		int R=0;
		bool ok=false;
		bool can=false;
		for(int i=1;i<=len;i++){
			if(A[i]=='('){
				if(can==true)ok=true;
				L++;
			}
			else{
				L--;
			if(L==0)can=true;
			}
		}	
		if(ok==true){
			cout<<"YES"<<'\n';
		}
		else{
			cout<<"NO"<<'\n';
		}
	}
	return 0;
}

//(()(()())
//((((()))))

F - It’s Time To Duel

其实,只有两种情况在撒谎。要么所有人都赢了;要么有相邻的人都输了。肯定是矛盾的。

在这里插入代码片#include<bits/stdc++.h>
using namespace std;
int A[200005];
int main(){
	int t;
	cin>>t;
	while(t--){
		int n;
		cin>>n;
		int s=0;
		for(int i=1;i<=n;i++){
			cin>>A[i];
			s=s+A[i];
		}
		if(s==n){
			cout<<"YES"<<'\n';
			continue;
		}
		bool ok=false;
		for(int i=1;i<=n-1;i++){
			if(A[i]==0&&A[i+1]==0){
				ok=true;
				break;
			}
		}
		if(ok)cout<<"YES"<<'\n';
		else cout<<"NO"<<'\n';
	}
	return 0;
}

//(()(()())
//((((()))))

G - Slice to Survive

很明显的思路,一个人想尽可能多,一个人想尽可能少,你自己做个博弈游戏玩玩就知道了。想避免被对手压缩生存空间,每次把怪兽放到当前活动空间的中心位置就行了,因为哪怕一分为二,也是能尽快可能多保障自己游戏次数。


#include<bits/stdc++.h>
using namespace std;
using ll=long long;
ll T;
ll N,M,a,b;
void solve() {
	ll ans=N+M;
	ll n=N;
	ll m=M;
	n-=max(a-1,N-a);
	ll sum=0;
	while(n!=1) {
		sum++;
		n=(n+1)/2;
	}
	while(m!=1) {
		sum++;
		m=(m+1)/2;
	}
	ans=min(ans,sum);
	sum=0;
	n=N;
	m=M;
	m-=max(b-1,M-b);
	while(n!=1) {
		sum++;
		n=(n+1)/2;
	}
	while(m!=1) {
		sum++;
		m=(m+1)/2;
	}
	ans=min(ans,sum);
	ans++; 
	printf("%lld\n",ans);

}
int main() {
	cin>>T;
	for(ll t=0; t<T; t++) {
		scanf("%lld%lld%lld%lld",&N,&M,&a,&b);
		solve();
	}

	return 0;
}

H - Permutation Warm-Up

对于一个 P i = i P_i=i Pi=i的排列,我们可以通过不断交换两个位置的数把它变成任意的排列。发现每次交换两个数增加的值是偶数,那么值只会是偶数。所有偶数都可以拿到。那么求出最大的值看有多少偶数。

#include<bits/stdc++.h>
using namespace std;

int main(){
    int t,n;
    cin>>t;
    while(t--){
        cin>>n;
        cout<<n*n/4+1<<'\n';
    }
    return 0;
}

I - LRC and VIP

直接把最大的数,放在一个序列;其余所有值放在另一个序列
他们所产生的最大公约数一定不相等,除非整个数组一开始全一样

纯思维题

J - Apples in Boxes

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
constexpr int N=1e5+7;
int a[N],n,k;
inline bool solve()
{
	cin>>n>>k;
    ll mx1=0,mx2=0,mn=1.2e18;
	ll s=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
        if(a[i]>mx1) mx1=a[i];
        else if(a[i]>mx2) mx2=a[i];
        if(a[i]<mn) mn=a[i];
		s=(s+a[i])%2;
	}
    mx1--;
	if((max(mx1,mx2)-mn)>k) return 0;  
	if(s%2==1) return 1;
	else return 0;
}
int main()
{
	int T;
	cin>>T;
	while(T--) puts(solve()?"Tom":"Jerry");	
	return 0;
}

K - Dr. TC

这题不会做吗???答案就是原本的串里面 1 1 1的个数乘N倍,再枚举一遍看看哪些位置被反转了,可能要加上或者减去

L - St. Chroma

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
int main() {

	int t = 1;
	cin >> t;
	while (t--) {
		int n, x;
		cin >> n >> x;
		if (x == 0) {
			for (int i = 1; i < n; i++) {
				cout << i << " ";
			}
			cout << 0 << "\n";
			return;
		}

		if (x == n) {
			for (int i = 0; i < n; i++) {
				cout << i << " \n"[i == n - 1];
			}
			return;
		}
		for (int i = 0; i < x; i++) {
			cout << i << " ";
		}
		for (int i = x + 1; i < n; i++) {
			cout << i << " ";
		}
		cout << x << "\n";
	}
	return 0;
}

M - Cherry Bomb

在这里插入图片描述

#include<bits/stdc++.h>

using namespace std;
int a[200005],b[200005];
int main(){

	int T;
	cin>>T;
	while(T--){
		int n,k;
		cin>>n>>k;
		for(int i=1;i<=n;i++){
			cin>>a[i];
		}
		bool flag=1;
		for(int i=1;i<=n;i++){
			cin>>b[i];
			if(b[i]!=-1) flag=0;
		}
		if(flag==1){
			int maxn=0,minn=1e9;
			for(int i=1;i<=n;i++){
				maxn=max(maxn,a[i]);
				minn=min(minn,a[i]);
			}
			if(maxn-minn>k) cout<<"0\n";
			else cout<<k-(maxn-minn)+1<<"\n";
		}
		else{
			bool f=1;
			int s=0;
			for(int i=1;i<=n;i++){
				if(b[i]!=-1){
					s=a[i]+b[i];
					break;
				}
			}
			for(int i=1;i<=n;i++){
				if(s-a[i]<0){
					f=0;
					break;
				}
				if(b[i]!=-1&&a[i]+b[i]!=s){
					f=0;
					break;
				}
				if(b[i]==-1){
					if(s-a[i]>k){
						f=0;
						break;
					}
				}
			}
			if(f==1) cout<<"1\n";
			else cout<<"0\n";
		}
	}
	return 0;
}

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

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

相关文章

【CF】Day69——⭐Codeforces Round 897 (Div. 2) D (图论 | 思维 | DFS | 环)

D. Cyclic Operations 题目&#xff1a; 思路&#xff1a; 非常好的一题 对于这题我们要学会转换和提取条件&#xff0c;从特殊到一般 我们可以考虑特殊情况先&#xff0c;即 k n 和 k 1时&#xff0c;对于 k 1&#xff0c;我们可以显然发现必须满足 b[i] i&#xff0c;而…

前端八股之Vue

目录 有使用过vue吗&#xff1f;说说你对vue的理解 你对SPA单页面的理解&#xff0c;它的优缺点分别是什么&#xff1f;如何实现SPA应用呢 一、SPA 是什么 二、SPA 和 MPA 的区别 三、SPA 的优缺点 四、实现 SPA 五、给 SPA 做 SEO 的方式&#xff08;基于 Vue&#xff…

谷歌地图高清卫星地图2026中文版下载|谷歌地图3D卫星高清版 V7.3.6.9796 最新免费版下载 - 前端工具导航

谷歌地图高清卫星地图2024中文版是一款非常专业的世界地图查看工具。通过使用该软件&#xff0c;你就可以在这里看到外太空星系、大洋峡谷等场景&#xff0c;通过高清的卫星地图&#xff0c;可以清晰查看地图、地形、3D建筑、卫星图像等信息&#xff0c;让你可以更轻松的探索世…

条形进度条

组件 <template><view class"pk-detail-con"><i class"lightning" :style"{ left: line % }"></i><i class"acimgs" :style"{ left: line % }"></i><view class"progress&quo…

IBM DB2分布式数据库架构

一、什么是分布式数据库架构 分布式数据库架构是现代数据库系统的重要发展方向&#xff0c;特别适合处理大规模数据、高并发访问和高可用性需求的应用场景。下面我们从原理、架构模式、关键技术、实现方式和常见产品几个方面来系统讲 1、分布式数据库的基本概念与原理 1. 什…

Android Studio 向模拟器手机添加照片、视频、音乐

Android Studio 向模拟器手机添加照片、视频、音乐(其实都是一样的&#xff0c;只是添加到不同的文件夹&#xff09;&#xff0c;例如我们在很多程序中功能例如&#xff1a;选择头像&#xff0c;跳转到手机相册选择头像&#xff0c;此时相册为空&#xff0c;即模拟器没有图片资…

数据结构-算法学习C++(入门)

目录 03二进制和位运算04 选择、冒泡、插入排序05 对数器06 二分搜索07 时间复杂度和空间复杂度08 算法和数据结构09 单双链表09.1单双链表及反转09.2合并链表09.2两数相加09.2分隔链表 013队列、栈、环形队列013.1队列013.2栈013.3循环队列 014栈-队列的相互转换014.1用栈实现…

连接关键点:使用 ES|QL 联接实现更丰富的可观测性洞察

作者&#xff1a;来自 Elastic Luca Wintergerst ES|QL 的 LOOKUP JOIN 现已进入技术预览阶段&#xff0c;它允许你在查询时对日志、指标和追踪进行丰富处理&#xff0c;无需在摄取时进行非规范化。动态添加部署、基础设施或业务上下文&#xff0c;减少存储占用&#xff0c;加速…

Flask + Celery 应用

目录 Flask Celery 应用项目结构1. 创建app.py2. 创建tasks.py3. 创建celery_worker.py4. 创建templates目录和index.html运行应用测试文件 Flask Celery 应用 对于Flask与Celery结合的例子&#xff0c;需要创建几个文件。首先安装必要的依赖&#xff1a; pip install flas…

奥威BI+AI数据分析:企业数智化转型的加速器

在当今数据驱动的时代&#xff0c;企业对于数据分析的需求日益增长。奥威BIAI数据分析的组合&#xff0c;正成为众多企业数智化转型的加速器。 奥威BI以其强大的数据处理和可视化能力著称。它能够轻松接入多种数据源&#xff0c;实现数据的快速整合与清洗。通过内置的ETL工具&…

python打卡day43

复习日 作业&#xff1a; kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 进阶&#xff1a;并拆分成多个文件 找了个街头食物图像分类的数据集Popular Street Foods&#xff08;其实写代码的时候就开始后悔了&#xff09;&#xff0c;原因在于&…

Linux --进程优先级

概念 什么是进程优先级&#xff0c;为什么需要进程优先级&#xff0c;怎么做到进程优先级这是本文需要解释清楚的。 优先级的本质其实就是排队&#xff0c;为了去争夺有限的资源&#xff0c;比如cpu的调度。cpu资源分配的先后性就是指进程的优先级。优先级高的进程有优先执行的…

安装和配置 Nginx 和 Mysql —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录6

前言 昨天更新了四篇博客&#xff0c;我们顺利的 安装了 ubuntu server 服务器&#xff0c;并且配置好了 ssh 免密登录服务器&#xff0c;安装好了 服务器常用软件安装, 配置好了 zsh 和 vim 以及 通过 NVM 安装好Nodejs&#xff0c;还有PNPM包管理工具 。 作为服务器的运行…

图解gpt之注意力机制原理与应用

大家有没有注意到&#xff0c;当序列变长时&#xff0c;比如翻译一篇长文章&#xff0c;或者处理一个长句子&#xff0c;RNN这种编码器就有点力不从心了。它把整个序列信息压缩到一个固定大小的向量里&#xff0c;信息丢失严重&#xff0c;而且很难记住前面的细节&#xff0c;特…

【Oracle】视图

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 视图基础概述1.1 视图的概念与特点1.2 视图的工作原理1.3 视图的分类 2. 简单视图2.1 创建简单视图2.1.1 基本简单视图2.1.2 带计算列的简单视图 2.2 简单视图的DML操作2.2.1 通过视图进行INSERT操作2.2.2 通…

更强劲,更高效:智源研究院开源轻量级超长视频理解模型Video-XL-2

长视频理解是多模态大模型关键能力之一。尽管OpenAI GPT-4o、Google Gemini等私有模型已在该领域取得显著进展&#xff0c;当前的开源模型在效果、计算开销和运行效率等方面仍存在明显短板。近日&#xff0c;智源研究院联合上海交通大学等机构&#xff0c;正式发布新一代超长视…

2025.6.3学习日记 Nginx 基本概念 配置 指令 文件

1.初始nginx Nginx&#xff08;发音为 “engine x”&#xff09;是一款高性能的开源 Web 服务器软件&#xff0c;同时也具备反向代理、负载均衡、邮件代理等功能。它由俄罗斯工程师 Igor Sysoev 开发&#xff0c;最初用于解决高并发场景下的性能问题&#xff0c;因其轻量级、高…

【连接器专题】案例:产品测试顺序表解读与应用

在查看SD卡座连接器的规格书,一些测试报告时,你可能会看到如下一张产品测试顺序表。为什么会出现一张测试顺序表呢? 测试顺序表的使用其实定义测试环节的验证的“路线图”和“游戏规则”,本文就以我人个经验带领大家一起看懂这张表并理解其设计逻辑。 测试顺序表结构 测试…

星动纪元的机器人大模型 VPP,泛化能力效果如何?与 VLA 技术的区别是什么?

点击上方关注 “终端研发部” 设为“星标”&#xff0c;和你一起掌握更多数据库知识 VPP 利用了大量互联网视频数据进行训练&#xff0c;直接学习人类动作&#xff0c;减轻了对于高质量机器人真机数据的依赖&#xff0c;且可在不同人形机器人本体之间自如切换&#xff0c;这有望…

4000万日订单背后,饿了么再掀即时零售的“效率革命”

当即时零售转向价值深耕&#xff0c;赢面就是综合实力的强弱。 文&#xff5c;郭梦仪 编&#xff5c;王一粟 在硝烟弥漫的外卖行业“三国杀”中&#xff0c;饿了么与淘宝闪购的日订单量竟然突破了4000万单。 而距淘宝闪购正式上线&#xff0c;还不到一个月。 在大额福利优惠…