3.8题目练习

news2024/11/17 10:29:25

1.数的计算

 题目其他部分:

 这道题目可以先试着自己推一下找一下规律,题目给出的数字是一个小于等于一千的数字,这里我们不妨考虑一下从小往大推,我们从1开始,用f[i]来表示对应i共有几个合法的序列:

当n为1的时候,我们可以得到序列1,f[1]=1;

当n为2的时候,我们可以得到序列2 21,f[2]=2=f[1]+1;

当n为3的时候,我们可以得到的序列为:3 31,f[3]=2=f[1]+1;

当n为4的时候,我们可以得到的序列为:4 42 41 421,f[4]=4=f[1]+f[2]+1;

当n为5的时候,我们可以得到的序列为:5 52 51 521,f[5]=f[1]+f[2]+1;

到这里其实已经可以发现规律,每个i对应的函数f值都等于从1加到i的一半所对应的函数值再加上1.

所以代码这么写:

#include<iostream>
#include<cmath>
using namespace std;
int n;
const int N=1e3+10;
int ans;
int f[N];
int main(){
	 cin>>n;
	 for(int i=1;i<=n;i++){
	 	for(int j=1;j<=i/2;j++){
	 		f[i]+=f[j];
		 }
		 ++f[i];
	 }
	 ans=f[n];
	 cout<<ans<<endl;
	 return 0;
}

这个代码的时间复杂度虽然看起来较高,但是由于n的范围是小于等于1000的所以无论如何都不会超时。

2.金属冶炼:

这道题可以直接通过数学推导的过程进行解答:首先我们不妨假设答案是v,那么对于一组金属的a,b必有b*v<=a,并且容易推测出冶炼不出b+1个,所以还有(b+1)* v>a;

通过移项之后,有:v <= a/b,v > a/(b+1);

所以对于每一组a,b我们能判断出对应的最大值和最小值,那么要让答案满足所有条件,必须使得算出来的最小值以max来更新,算出来的最大值以min来更新,代码如下:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
signed main(){
	   ios::sync_with_stdio(false);
	   cin.tie(nullptr);
	   cout.tie(nullptr);
	   cin>>n;
	   int ans1=1>>30,ans2=1<<30;
	   for(int i=1;i<=n;i++){
	   	    int a,b;
			cin>>a>>b;  
	         ans1=max(ans1,a/(b+1)+1),ans2=min(ans2,a/b);
	   }
	   cout<<ans1<<" "<<ans2<<endl;
	   return 0;
}

这道题目找到正确的方法就会很快做出,当然也能通过二分的方法去做。

3.管道:

先进行分析,我们要求的是最小的t,并且t满足t时刻已经让所有管道都检测到了水,那么我们就可以发现,t其实就相当于是一个分界线,小于t的都不满足条件,大于t的都满足条件,而t时刻是刚刚好满足的,也就是我们要求的条件。

所以接下来我们就可以考虑使用二分的方法来算出这个临界的t,接下来看代码:

#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int N=1e6+100;
typedef pair<int,int> pii;
pii a[N];
int n,len;
bool check(int x){
      vector<pii>p;
	  for(int i=0;i<n;i++){
	  int l=a[i].first,s=a[i].second;
	  if(s>x) continue;
	  int t1=max(1ll,l-x+s),t2=min(len,l+x-s);
      p.push_back({t1,t2});	  	
	  }	
	  int num=p.size();
	  sort(p.begin(),p.end());
	  if(p.empty()) return false;
	  if( p[0].first>1 ) return false;
	  int pd=p[0].second;
	  for(int i=1;i<num;i++){
	  	if(p[i].first > pd+1) return false;
	  	pd=max(pd,p[i].second);
	  } 
	  return pd == len;
}
signed main(){
	   ios::sync_with_stdio(false);
	   cin.tie(nullptr);
	   cout.tie(nullptr);
	   cin>>n>>len;
	   for(int i=0;i<n;i++){
	   	   int x,y;
	   	   cin>>x>>y;
	      a[i].first=x;
		  a[i].second=y;   	    
 	   }
	   int l=0,r=2e9;
       while(l<r){
       	int mid=l+r>>1;
       	if(check(mid)) r=mid;
		   else l=mid+1; 
	   }
	   cout<<l<<endl;
	   return 0;
}

4.壁画:

 读了三遍题目才把题意完全的读懂,对于这一道题,先手进行选择一个地方进行作画,然后作一次画就会坍塌一面墙壁,并且题目中说坍塌的墙壁附近有且仅有一面还没有坍塌的墙壁,因此我们可以发现,其实题目要我们求的就是长度为n/2的最大前缀和,那么代码就可以这样去写:

#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<cstring>
#define int long long
typedef unsigned long long ull;
using namespace std;
int t;
int n;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin>>t;
	for(int k=1;k<=t;k++){
		cin>>n;
		string s;
		cin>>s;
		s=' '+s;
	    vector<int>a(n+1);
	    int ans=0;
		for(int i=1;i<=n;i++){
		a[i]=a[i-1]+(s[i]-'0');	 
		}
		int cnt=(n+1)/2;
		for(int i=cnt;i<=n;i++){
			ans=max(ans,a[i]-a[i-cnt]);
		}
		cout<<"Case #"<<k<<": "<<ans<<endl; 
	}
	return 0;
}

对于每一组数据都单独进行处理,注意一下cnt一定要加1再除以2,因为我们先手进行的是作画操作,如果有奇数个墙壁那么作画的次数必定比坍塌的墙壁数目多1。

 5.公交换乘:

 

 

 这道题目只是需要有贪心的思想去做就好,优化时间复杂度到能获得满分即可,对于每一张票我们可以用结构体表示它的使用状态和价格以及购买时间,来方便进行模拟,以下即代码实现:

#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
struct ticket{
	int time,price;
	bool used;
}a[100010];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int way,p,t;
		cin>>way>>p>>t;
		if(way==0){
			ans+=p;
			m++;
			a[m].time=t;
			a[m].price=p;
			a[m].used=false;
		} else {
			int id=-1;
			for(int j=m;j>=1;j--){
				if(a[j].time<t-45) break;
				if(a[j].price>=p && !a[j].used)
				id=j;
			}
			if(id!=-1)
			a[id].used=true;
			else ans+=p;
		}  
	}
	cout<<ans<<endl;
	return 0;
}

感谢您的观看。

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

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

相关文章

设计模式大题做题记录

设计模式大题 09年 上半年&#xff1a; 09年下半年 10年上半年 10年下半年 11年上半年 11年下半年 12年上半年 12年下半年 13年上半年 13年下半年

MindOpt优化器: 浅谈版本0.x和1.x之间API的差异

Mindopt 是一个优化求解器&#xff0c;如果它有两个主要版本——0.xx和1.x.x&#xff08;最新版本1.1.1&#xff09;&#xff0c;它们代表着软件开发的两个不同阶段。版本1.0.0表示软件的一个大的里程碑&#xff0c;代表着软件第一个正式的“成熟”发布版本&#xff0c;而0.25是…

用开发CesiumJS模拟飞机飞行应用(一,基本功能)

本部分向您展示如何构建您的第一个 Cesium 应用程序&#xff0c;以可视化模拟从旧金山到哥本哈根的真实航班&#xff0c;并使用 FlightRadar24收集的雷达数据。您将学习如何&#xff1a; 在网络上设置并部署您的 Cesium 应用程序。 添加全球 3D 建筑物、地形和图像的基础图层。…

高校水电预付费系统有什么作用?

Hey小伙伴们&#xff0c;今天来聊聊咱们大学里的一个超级实用的设施——水电预付费系统&#xff01;你是不是还在为每个月的水电账单烦恼呢&#xff1f;别担心&#xff0c;这个系统就是你的生活小帮手&#xff01; 首先&#xff0c;想象一下这 样的场景&#xff1a;开学初&…

Python通过SFTP实现网络设备配置备份

一、背景 为了防止网络设备意外损坏&#xff0c;导致配置文件无法恢复&#xff0c;可以通过将网络设备的配置文件备份到本地电脑上。 一般情况下&#xff0c;设备支持通过FTP、TFTP、FTPS、SFTP和SCP备份配置文件。其中使用FTP和TFTP备份配置文件比较简单&#xff0c;但是存在…

JAVA实现图像取模

JAVA对图像取模 就是图片变成点阵 原图 取模效果图 代码如下&#xff1a; public static void main(String[] args) throws IOException {try {// 读取图像文件BufferedImage image ImageIO.read(new File("C:/Users/xiaol/Desktop/img/0.jpg"));// 定义阈值&am…

模拟实现strlen函数

一、逐个计数法 #include<assert.h> #include<stdio.h>size_t my_strlen(const char* p) {int count 0;assert(p);//断言while (*p ! \0){p;count;}return count; }int main() {char str[] "hello world";size_t len my_strlen(str);printf("%d…

听 GPT 讲 client-go 源代码 (23)

分享更多精彩内容&#xff0c;欢迎关注&#xff01; File: client-go/kubernetes/scheme/register.go 在client-go项目中&#xff0c;client-go/kubernetes/scheme/register.go文件的作用是进行Kubernetes API对象的Scheme注册。 Scheme是一个用于序列化和反序列化Kubernetes A…

抖音视频评论采集工具|短视频批量下载软件

《抖音视频评论采集工具——解放双手的智能助手》 在数字化时代&#xff0c;抖音视频已成为人们获取信息、娱乐放松的重要来源之一。针对抖音视频评论的采集需求&#xff0c;我们推出了一款功能强大的软件&#xff0c;让您轻松实现评论批量提取&#xff0c;QQ:290615413提高工作…

stm32学习笔记:SPI通信协议原理(未完)

一、SPI简介(serial Peripheral Interface&#xff08;串行 外设 接口&#xff09;) 1、电路模式&#xff08;采用一主多从的模式&#xff09;、同步&#xff0c;全双工 1 所有SPI设备的SCK、MOSI、MISO分别连在一起 2 主机另外引出多条SS控制线&#xff0c;分别接到各从机的S…

二维码门楼牌管理系统应用场景:商业与零售业发展的助推器

文章目录 前言一、二维码门楼牌管理系统的基本功能二、商业和零售业中的应用场景三、二维码门楼牌管理系统的优势分析四、结论 前言 在数字化时代的浪潮中&#xff0c;二维码门楼牌管理系统凭借其独特的优势&#xff0c;正在逐步成为商业和零售业发展的新宠。它不仅能够为商家…

LLMs在BI中的运用

现有的BI分析存在以下一些问题&#xff1a; 原始数据入库规整要求比较高。业务过程产生的数据需要经过一些清洗等前置处理后才能够进行后续的BI分析使用。业务部门的数据分析过度依赖于技术部门。而业务与技术之间由于对分析需求理解上的差异&#xff0c;往往需要繁琐的沟通与…

六、长短时记忆网络语言模型(LSTM)

为了解决深度神经网络中的梯度消失问题&#xff0c;提出了一种特殊的RNN模型——长短期记忆网络&#xff08;Long Short-Term Memory networks, LSTM&#xff09;&#xff0c;能够有效的传递和表达长时间序列中的信息并且不会导致长时间前的有用信息被忽略。 长短时记忆网络原理…

springboot244基于SpringBoot和VUE技术的智慧生活商城系统设计与实现

智慧生活商城系统的设计与实现 摘 要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&…

【wine】winetricks部署一个windows xp 应用程序的基础运行环境

AI 的资料 我想基于wintricks的“安装windows dll 或组件”功能&#xff0c;安装一个基础的windows xp运行环境&#xff0c;应当安装那些项目&#xff1f; 为了基于winetricks创建一个基础的Windows XP运行环境&#xff0c;您应该考虑安装以下项目以提高兼容性&#xff1a; 核…

非常好用的Java诊断工具Arthas(阿尔萨斯)

小伙伴们好&#xff0c;欢迎关注&#xff0c;一起学习&#xff0c;无限进步 文章目录 Window 安装Linux 安装SpringBoot 整合 arthas其他使用场景 Arthas是阿里巴巴开源的一款Java诊断工具&#xff0c;可以用于线上诊断问题、监控应用性能等。支持 Linux/Mac/Windows&#xff0…

3D-Genome | Hi-C互作矩阵归一化指南

Hi-C 是一种基于测序的方法&#xff0c;用于分析全基因组染色质互作。它已广泛应用于研究各种生物学问题&#xff0c;如基因调控、染色质结构、基因组组装等。Hi-C 实验涉及一系列生物化学反应&#xff0c;可能会在输出中引入噪声。随后的数据分析也会产生影响最终输出噪声&…

【C++】浅谈 vector 迭代器失效 深拷贝问题

目录 前言 一、底层空间改变 【错误版本1】 &#x1f31f;【解答】正确版本 ​ 【错误版本2】 &#x1f31f;【解答】正确版本 二、指定位置元素的删除操作--erase 【错误版本1】 &#x1f31f;【解答】 【错误版本2】 &#x1f31f;【解答】 三、深拷贝问题 前言 迭…

基于Jupyter快速入门Python,Numpy,Scipy,Matplotlib

文章目录 Jupyter 和 Colab 笔记本PythonPython 版本基础数据类型数字Numbers布尔值Booleans字符串Strings 容器列表List字典Dictionaries集合Sets元组Tuples 函数类 Numpy数组Array数组索引Array indexing数据类型DatatypesArray math广播Broadcasting Scipy图像操作MATLAB文件…

Pytorch_lightning先前版本的官方文档地址

https://lightning.ai/docs/pytorch/1.4.2/https://lightning.ai/docs/pytorch/1.4.2/ Pytorch_lightning更新到2后&#xff0c;和之前版本的变化较大&#xff0c;以前原有的api被删除了 比如&#xff1a;on_pretrain_routine_start 官方也没有在显眼的位置放置先前版本的文档…