预备役二招算法测试题解

这次题目出的都是一些偏向于基础的题目,就是一些简单的模拟,思维,以及基础算法(二分,前缀和)

(点击题目标题,进入原题)

我是签到题

题解:就是说给你 t 组数据,然后每组数据输入两个,一个x,一个y,然后先输出其中的最小值,再输出其中的最大值。

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

long long x,y;
int main()
{
	long long t;
	cin>>t;
	while(t--)
	{
		cin>>x>>y;
		printf("%lld %lld\n",min(x,y),max(x,y));
	}
	return 0;
}

能否形成不同的矩形

 

 

题解:能够拆开并且拼凑到一起的边一定是偶数,因此,我们就是单纯去模拟就可以了,如果是偶数就去分开,将其拼凑在一起,判断和之前的是否形成了不一样的矩形(纯粹的模拟题,题目上咋说,你去就咋做)

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

int t;
int a,b;
signed main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
    cout.tie(0);
	cin>>t;
	while(t--)
	{
		int flag=0;
		cin>>a>>b;
		int x=0,y=0;
		if(a%2==0)
		{
			y=2*b;
			x=a/2;
			if(x!=a&&y!=b&&x!=b&&y!=a)
			{
				flag=1;
			}
		}
		if(b%2==0)
		{
			y=b/2;
			x=2*a;
			if(x!=a&&y!=b&&x!=b&&y!=a)
			{
				flag=1;
			}
		}
		if(flag==1)
		{
			cout<<"YES\n";
		}
		else
		{
			cout<<"NO\n";
		}
	}
	return 0;
}

能否形成不同的字符串

题解:这题比第二个还简单,只需要判断是否能够形成不同的字符串,首先就是你得先判断字符串里面是否有不同的字母,如果没有肯定 是NO,如果有不同的字母,输出YES,并且随机交换两个不同的字母输出就行

#include<bits/stdc++.h>
using namespace std; 
string s;
int t;
int flag;
char r[5000005];
int x,y;
int main()
{
	cin>>t;
	while(t--)
	{
		flag=0;
		cin>>s;
		int len=s.size();
		for(int i=1;i<len;i++)
		{
			if(s[i]!=s[i-1])
			{
				flag=1;
				x=i,y=i-1;
			}
		}
		for(int i=1;i<len;i++)
		{
			r[i-1]=s[i];
		}
		r[len-1]=s[0];
		if(flag==0)
		printf("NO\n");
		else
		{
			printf("YES\n");
			for(int i=0;i<len;i++)
		   {
			printf("%c",r[i]);
		   }
		   printf("\n");
		}
	}
	return 0;
}

查找

 

这题唯一考点就是二分查找,并且数据结构课应该讲过(我不怎么听课,我不确定,应该是讲过的)

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

int n,m;
int a[1000005];
int target,l,r,mid;
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&target);
		l=1;r=n;
		while(l<r)
		{
			mid=(l+r)/2;
			if(a[mid]>=target)
			r=mid;
			else
			l=mid+1;
		}
		if(a[l]==target)
		printf("%d ",l);
		else
		printf("-1 ");
	}
	return 0;
}

A. Contest Proposal

这题就是说有n个题目,每个题目的难度为a[i],要求每个题目的难度不大于对应的b[i],每次可以添加一个题目并且删去最难的题目,求最多能添加几个题目

思路很简单,只要a[i]>b[i],那么就将a[i]改成b[i],并且重新对数组进行排序,然后继续比较就行

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll t;
ll n;
ll a[105];
ll b[105];
void solve(){
	ll u = n;
		ll sum = 0;
		for(int i=n;i>=1;i--)
		{
            if(a[i]>b[u])
            {
                sum++;
            }
            else 
			{
                u--;
            }
        }
        printf("%lld\n",sum);
}
int main()
{
    cin>>t;
    while (t--) 
	{
        cin>>n;
        for (int i = 1; i <= n; i++)
        cin>>a[i];
        for (int i = 1; i <= n; i++)
        cin>>b[i];
        solve();
    }
    return 0;
}

B. Sasha and the Drawing

题解:纯思维性题目,做不出来也算正常,这题 自己在本子上画的话,会发现最多只有前n - 1给才能占两个对角线,也就是2*(n-1)个对角线,剩下的一个涂色只能占一个对角线,因此我们通过这个思路去计算即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;

signed main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>k;
		int sum=2*n-2;
		if(k<=(2*n-2)*2)
		{
			if(k%2==0)
			cout<<k/2<<"\n";
			else
		    cout<<k/2+1<<"\n";
		}
		else
		{
			int cnt=2*n-2;
			k-=(2*n-2)*2;
			cnt+=k;
			cout<<cnt<<"\n";
		}
	}
	return 0;
}

P1314 [NOIP2011 提高组] 聪明的质监员

题意:就是说给你n个矿石,然后,这n个矿石都有自己的重量w,以及其价值v,我们有一种判断机制,就是说给你m个区间范围,每次给你一个左边界L和右边界R,我们的计算机理是,这个区间内的大于规定筛选重量W的数量,乘以大于筛选重量的价值,然后将总的算出来的y累加到一起,看看和规定的标准值S最小差多少,输出最小的参数W

思路,我们发现这题数据超大,必然会有优化方法,我们通过上面·的题意可以发现,我们的参数设置的越大,能过筛选的石头越少,得到的y值越小,设置的越小,能筛选过的石头越多,得到的y值越大,因此我们可以用二分(二分的范围就是给的数据的石头的最小值到最大值,但是我们还要扩增范围,最小值减一,最大值加二)然后我们每次二分的就是参数W,然后在计算过程中要用到前缀和优化,我们要去记录出现的大于参数的矿石数目以及总价值,然后我们去计算总的Y值,Y值大于标准值S就说明,我们的参数设置的小了,要增大左边界,要是小于标准值,就说明,我们的参数设置的太大了,要缩小右边界

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,s;
int w[200005];
int v[200005]; 
int l[200005],r[200005];
int maxn=0;
int minn=0x3f3f3f3f3f3f3f3f;
int sumn[200005];
int sumv[200005];
int ans=0;//统计本次筛选的总价值
int mn=0x3f3f3f3f3f3f3f3f;//统计最小差值 
bool check(int mid)
{
	memset(sumn,0,sizeof(sumn));
	memset(sumv,0,sizeof(sumv));
	int ans=0;//统计总的价值也就是y[i] 
	for(int i=1;i<=n;i++)
	{
		if(w[i]>=mid)
		{
			sumn[i]=sumn[i-1]+1;//统计能过筛查的数量
			sumv[i]=sumv[i-1]+v[i];//统计能过筛查的价值 
		}
		else
		{
			sumn[i]=sumn[i-1];
			sumv[i]=sumv[i-1];
		}
	}
	
	for(int i=1;i<=m;i++)
	{
		ans+=(sumn[r[i]]-sumn[l[i]-1])*(sumv[r[i]]-sumv[l[i]-1]);
	}
	mn=min(mn,llabs(ans-s));
	if(ans>s)
	return true;
	return false;
}
signed main()
{
	cin>>n>>m>>s;
	for(int i=1;i<=n;i++)
	{
		cin>>w[i]>>v[i];
		maxn=max(maxn,w[i]);//二分的上下边界 
		minn=min(minn,w[i]);
	}
	int left,right,mid;
	for(int i=1;i<=m;i++)
	{
		cin>>l[i]>>r[i];
	}
	left=minn-1,right=maxn+2;
	while(left<=right)
	{
		mid=(left+right)/2;
		if(check(mid))
		{
			left=mid+1;
		}
		else
		{
			right=mid-1;
		}
	}
	cout<<mn;
	return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MDK5问题】:MDK中的jlink正常下载,但是板子却没有任何反应

1、问题现象&#xff1a; 1、在MDK5中&#xff0c;jlink配置项如下图&#xff0c;没有看到异常情况和配置&#xff1a; 2、点击load下载到板子上&#xff0c;出现的现象是&#xff0c;下载提示下载完成&#xff0c;但是&#xff0c;板子却没有任何反应&#xff08;程序实现应该…

音频傅里叶变换(基于开源kissffs)

主要参考资料&#xff1a; 深入浅出的讲解傅里叶变换&#xff08;真正的通俗易懂&#xff09;: https://zhuanlan.zhihu.com/p/19763358 推荐开源项目&#xff1a;KISS FFT&#xff1a; https://blog.csdn.net/gitblog_00031/article/details/138840117 数字硅麦数据的处理&…

【Linux】基础IO_1

文章目录 六、基础IO1. C语言的文件接口2. 系统文件I/O 未完待续 六、基础IO 1. C语言的文件接口 我们知道 文件 文件内容 文件属性 。即使是一个空文件&#xff0c;仍然会在磁盘中占据空间。那打开文件是什么意思呢&#xff1f;其实文件打开的意思就是&#xff1a;将文件从…

上海舆情分析软件的功能和对企业的意义

随着互联网的飞速发展&#xff0c;人们参与讨论、发声的途径与评率也越来越多&#xff0c;在为自己发声的同时&#xff0c;公众舆论也成为企业获取民意&#xff0c;改进发展的重要参考。 上海 舆情分析软件的开发&#xff0c;为企业获取舆论&#xff0c;调查研究提供了便捷化的…

探寻Scala的魅力:大数据开发语言的入门指南

大数据开发语言Scala入门 一、引言1.1 概念介绍1.2 Scala作为大数据开发语言的优势和应用场景1.2.1 强大的函数式编程支持1.2.2 可与Java无缝集成1.2.3 高性能和可扩展性1.2.4 大数据生态系统的支持 二、Scala基础知识2.1. Scala简介&#xff1a;2.1.1 Scala的起源和背景2.1.2 …

【Win】USB设备连接与移除的实时追踪

在这个信息爆炸的时代&#xff0c;USB设备成了我们不可或缺的数据伴侣。但你有没有想过&#xff0c;当你的USB突然消失&#xff0c;或者你不确定它何时被拔出&#xff0c;这可能会让你陷入困境。别担心&#xff0c;即使Windows系统没有默认提供监控功能&#xff0c;我们也可以轻…

fairseq (Facebook AI Research) 包

0. Abstract 最近在看一个用 RNNs 网络做 Translation 任务的程序, 关于数据处理部分, 主要用到工具包 sentencepiece 和 fairseq, 前者主要是对文本进行分词处理, 后者则是对已分词的文本进行二进制化和快速加载. 包越方便使用, 就说明包装得越狠, 也就越令人一头雾水, 本文简…

巧用newSingleThreadExecutor让异步任务顺序跑

背景 Flume 是 Cloudera 提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系统 。一个用来控制 Flume 采集任务的 Web 应用&#xff0c;需要对任务进行管理&#xff0c;主要操作「启动、停止、新建、编辑、删除」&#xff0c;本质就是对…

神经网络实战2-损失函数和反向传播

其实就是通过求偏导的方式&#xff0c;求出各个权重大小 loss函数是找最小值的&#xff0c;要求导&#xff0c;在计算机里面计算导数是倒着来的&#xff0c;所以叫反向传播。 import torch from torch.nn import L1Lossinputstorch.tensor([1,2,3],dtypetorch.float32) targe…

品牌策划背后的秘密:我为何对此工作情有独钟?

你是否曾有过一个梦想&#xff0c;一份热爱&#xff0c;让你毫不犹豫地投身于一个行业&#xff1f; 我就是这样一个对品牌策划充满热情的人。 从选择职业到现在&#xff0c;我一直在广告行业里“混迹”&#xff0c;一路走来&#xff0c;也见证了许多对品牌策划一知半解的求职…

RubyMine 2024 mac/win版:智慧编程,从心出发

JetBrains RubyMine 2024 是一款专为Ruby和Rails开发者打造的高效集成开发环境(IDE)。它凭借其卓越的性能和丰富的功能&#xff0c;帮助开发者在Ruby和Rails的开发过程中提升效率&#xff0c;减少错误。 RubyMine 2024 mac/win版获取 RubyMine 2024 提供了强大的代码编辑功能&…

mp4转换成mp3怎么转?教你几种值得收藏的转换方法!

mp4转换成mp3怎么转&#xff1f;MP4&#xff0c;这一深入人心的数字多媒体容器格式&#xff0c;无疑在当今数字世界中占据了一席之地&#xff0c;那么&#xff0c;它究竟有何过人之处呢&#xff1f;首先&#xff0c;MP4的跨平台兼容性是其一大亮点&#xff0c;不论是在Windows的…

免费的AI在线写作工具,让写作变的更简单

在如今的时代&#xff0c;写作已经成为了我们日常生活中不可或缺的一部分。无论是自媒体创作者、学生还是办公职场人员&#xff0c;都有内容创作的需求。然而&#xff0c;写作过程往往伴随着灵感枯竭、查找资料费时等问题。下面小编就来和大家分享几款免费的AI在线写作工具&…

cube studio开源一站式机器学习平台:k3s部署cube-studio

全栈工程师开发手册 &#xff08;作者&#xff1a;栾鹏&#xff09; 一站式云原生机器学习平台 前言 开源地址&#xff1a;https://github.com/tencentmusic/cube-studio cube studio 腾讯开源的国内最热门的一站式机器学习mlops/大模型训练平台&#xff0c;支持多租户&…

超级缓存神器:Memcached解密 - 加速你的网站速度

Memcached介绍和详解 1. 简介1.1 什么是Memcached1.2 Memcached的目标和特点1.3 Memcached的优势和适用场景 2. 架构和原理2.1 Memcached的客户端-服务器模型2.2 Memcached的内存存储结构2.3 Memcached的数据访问和数据存储流程2.3.1 数据访问流程2.3.2 数据存储流程 3. 安装和…

爆了!5个yyds的开源项目!

朋友们&#xff0c;今天我要来跟大家聊聊几个超级棒的开源项目&#xff0c;简直是yyds级别&#xff0c;绝对让你眼前一亮&#xff01;美图镇楼~ 01. Motrix——全能下载管家 下载资源太麻烦&#xff1f;试试Motrix吧&#xff01;这是一款功能强大的下载工具&#xff0c;支持HT…

湖南省物联网挑战赛教学平台使用说明文档

1物联网教学平台硬件连接 1.1硬件介绍 1&#xff09;物联网教学平台实验箱 2&#xff09;物联网硬件平台 3&#xff09;无线传感器节点 4&#xff09;智能烧录平台 1.2连线 注&#xff1a;智能烧录平台上的USB接口必须与物联网硬件平台“开关”那一面最右侧USB接口连接 1.3修…

【Sa-Token|4】Sa-Token微服务项目应用

若微服务数量多&#xff0c;如果每个服务都改动&#xff0c;工作量大&#xff0c;则可以只在网关和用户中心进行改动&#xff0c;也是可以实现服务之间的跳转。 这种方式可以通过在网关服务中生成和验证 Sa-Token&#xff0c;并将其与现有的 Token关联存储在 Redis 中。用户中心…

[Linux]缓冲区

一、概念 缓冲区&#xff0c;也称为缓存&#xff0c;是内存空间的一部分。也就是说&#xff0c;在内存空间中预留了一定的存储空间&#xff0c;用来缓冲输入或输出的数据。这个保留的空间称为缓冲区。 缓冲区的主要作用就是提高效率&#xff1a; 提高使用者的效率&#xff0…

JAVA SDK 整合 AI 大语言模型

目前主流模型厂商的 SDK 并没有很好的支持 JAVA 环境&#xff0c;主流还是使用的 Python &#xff0c;如果希望将 AI 功能集成到业务中来&#xff0c;则需要找找有没有一些现成的开源项目&#xff0c;但是这种项目一般需要谨慎使用&#xff0c;以防有偷取 app_key 等风险问题 前…