PAT 1085 Perfect Sequence

news2024/10/2 10:36:25

个人学习记录,代码难免不尽人意

在这里插入图片描述
Sample Input:

10 8
2 3 20 4 5 1 6 7 8 9

Sample Output:

8

#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<map>
#include<cmath>
using namespace std;
int num[100010];
int n,p;

int main(){
   scanf("%d%d",&n,&p);
   for(int i=0;i<n;i++){
   	scanf("%d",&num[i]);
   }
   sort(num,num+n);
   int sum=0;
   int i=0,j=0;
   for(i;i<n;i++){
   	for(j;j<n;j++){
   		if((long long)num[i]*p<num[j])
   		break;
	   }
 sum=max(sum,j-i);
   }
   printf("%d\n",sum); 
   return 0;
  
}

这道题可以使用二分法或者《算法笔记》上面介绍的two points做法来做。二分法的解决办法可以看书,我这里使用的是two points来做的。思路如下:遍历每一个下标i,找到其对应的最小下标j,使得num[j]>num[i]*p成立,容易得知如果i1<i2,那么j1<j2一定成立,因此可以简化循环次数。
不过最后一个测试点我死活不过去,最后比照着别人的代码一点一点排查才发现是这个地方出了错误:

long long x=num[i]*p;
if(x<num[j])
   		break;
 -------------------------------------------------------
if((long long)num[i]*p<num[j])
   		break;

上面第一种代码形式会报错!一开始我也不知道为啥,问了问chatgpt回答感觉还挺靠谱的,以后得多加小心:

第一段代码中,错误在于将 num[i]*p 赋值给 long long 类型的变量 x。在这种情况下,C++ 语言会先进行 num[i]*p 的乘法运算,结果存储在一个临时变量中,然后将临时变量转换为 long long 类型的 x。如果乘法运算产生了溢出,即乘积的结果超过了 long long 类型的表示范围,则转换后的 x 的值将是溢出后的结果。因此,在判断 x 是否小于 num[j] 时可能得到错误的结果。

第二段代码中,通过将 num[i]*p 强制转换为 long long 类型进行比较,可以避免溢出问题。强制转换操作会在进行乘法运算之前将 num[i] 转换为 long long 类型,确保乘法运算结果不会溢出,并且与 num[j]进行比较时也不会产生错误的结果。因此,第二段代码是正确的。

ps:如果很想用第一种方法的话,必须保证两个乘数为long long类型才可以。

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

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

相关文章

CAP理论与MongoDB一致性,可用性的一些思考

正文 大约在五六年前&#xff0c;第一次接触到了当时已经是hot topic的NoSql。不过那个时候学的用的都是mysql&#xff0c;Nosql对于我而言还是新事物&#xff0c;并没有真正使用&#xff0c;只是不明觉厉。但是印象深刻的是这么一张图片&#xff08;后来google到图片来自这里&…

打造个性化观影盛宴:对实时多兴趣召回的探索

包括 Tubi 在内的广告型点播流媒体服务&#xff0c;正在成为免费在线消费娱乐的重要组成部分。Tubi 拥有一个囊括电视剧、电影、体育和娱乐直播频道的海量视频内容库&#xff1b;同时&#xff0c;Tubi 为观众提供个性化的视频推荐&#xff0c;帮助观众快速找到想看的视频内容&a…

从零实战SLAM-第二课(SLAM中的基础数学)

空间数据的表达方式&#xff1a;点和向量两种形式。 向量的内积&#xff0c;也叫做点乘&#xff0c;是逐点相乘后累加&#xff0c;最终结果是一个标量&#xff0c;物理意义是一个向量在另一个向量上的投影。 外积&#xff0c;也叫做叉乘&#xff0c;两个向量拼起来成&#xff0…

vue二进制下载

封装axios&#xff0c;/api/request import axios from axios import store from /store import Vue from vue import { Message, MessageBox } from element-uiimport { getToken } from /utils/authaxios.defaults.headers[Content-Type] application/json;charsetutf-8 co…

同一局域网共享一个打印机方法

文章目录 需求描述设备连接情况配置网络凭证 需求描述 pc2想直接打印&#xff0c;而不是每次存到u盘&#xff0c;再拿到pc1&#xff0c;打印&#xff0c;实现本机打印 设备连接情况 配置 &#xff08;1&#xff09;pc1设置 ①共享打印机操作 控制面板——>设备和打印机—…

HC32L110B6芯片测试

到货之后&#xff0c;直观上感觉的确很小&#xff0c;小包装盒里面还装了说明书。 下载器单独在一个盒里面&#xff0c;但是这个T-U2T没用上&#xff0c;还是用的STLINK。 开发之前先去网上找了一些别人遇到的坑&#xff0c;的确不少。 涉及的方面也是挺全的&#xff0c;供电、…

1. 如何爬取自己的CSDN博客文章列表(获取列表)(博客列表)(手动+python代码方式)

文章目录 写在最前步骤打开chrome浏览器&#xff0c;登录网页按pagedown一直往下刷呀刷呀刷&#xff0c;直到把自己所有的博文刷出来然后我们按F12&#xff0c;点击选取元素按钮然后随便点一篇博文&#xff0c;产生如下所示代码然后往上翻&#xff0c;找到头&#xff0c;复制然…

DC-9靶机(端口敲门服务Knockd)

DC-9靶机地址 信息收集 主机发现 靶机MAC&#xff1a;00:0C:29:5A:C1:F4 arp-scan -l端口扫描 nmap -A -p- 192.168.80.142访问80端口 目录爆破 dirsearch -u 192.168.80.139 -i 200点击页面上的四个标签&#xff0c;发现 有个搜索 框&#xff0c;有个登录框 先用bp抓个包…

atxserver2环境搭建

1. 卸载python3.11.4版本 $sudo rm -rf /Library/Frameworks/Python.framework/Versions/3.11/ $sudo rm -rf /Applications/Python\ 3.11/ 第三步&#xff1a;删除指向python的链接 cd /usr/local/bin/ ls -l /usr/local/bin | grep /Library/Frameworks/Python.framework/…

利用logstash将graylog日志传输到kafka中

1.graylog配置输出 在System-outputs&#xff0c;选择GELF Output&#xff0c;填写如下内容&#xff0c;其它选项默认 在要输出的Stream中&#xff0c;选择Manage Outputs 选择GELF Output&#xff0c;右边选择刚才创建好的test。 2.安装logstash&#xff0c;作为中间临时…

Vue 整合 Element UI 、路由嵌套和参数传递(五)

一、整合 Element UI 1.1 工程初始化 使用管理员的模式进入 cmd 的命令行模式&#xff0c;创建一个名为 hello-vue 的工程&#xff0c;命令为&#xff1a; # 1、目录切换 cd F:\idea_home\vue# 2、项目的初始化&#xff0c;记得一路的 no vue init webpack hello-vue 1.2 安装…

记录一次使用python调用java代码

Python调用Java代码的主要原理是通过使用Java虚拟机&#xff08;JVM&#xff09;和相关的库/工具实现的。 在Python中&#xff0c;可以使用以下几种方式来调用Java代码&#xff1a; 使用subprocess模块&#xff1a;可以通过subprocess模块来启动一个子进程&#xff0c;并在子进…

OpenGL纹理

纹理采样器----纹理坐标 只有纹理坐标&#xff0c;纹理没有作用。 纹理坐标是在顶点着色器中设置&#xff0c;需要传入片段着色器&#xff0c;在片段着色器中需要定义纹理采样器。 然后调用texture函数利用采样器和纹理坐标对纹理进行采样。 我们使用GLSL内建的texture函数…

大模型落地金融业,想象力在哪?

金融大模型的难点在于&#xff0c;能否在产业中扎得更深&#xff1b;其颠覆性也更建立在&#xff0c;纵深到产业中去&#xff0c;赋能金融行业的长尾场景发展&#xff0c;以及重拾“金融信任”。 作者|思杭 编辑|皮爷 出品|产业家 “从经济角度讲&#xff0c;整个金融业…

界面设计用什么工具好?还不知道这5个吗?

无论是在APP设计&#xff0c;还是网站设计中&#xff0c;界面设计都是非常重要的&#xff0c;今天本文将为大家推荐5个优质的界面设计软件&#xff0c;一起来看看吧&#xff01; 1、即时设计 即时设计是新一代界面设计软件&#xff0c;它不仅为设计师提供了精细的矢量编辑功能…

纯C#使用Visionpro工具1

各个工具的程序集名称 一般分类 一般情况是去掉Tool和Cog就是命名空间&#xff0c;如CogBlobTool对应于Cognex.Visionpro.Blob 也有特殊情况 忘了怎么办 可以借用ToolBlock引入工具后打开高级脚本查看 了解工具类和对象

过河卒(c++题解)

题目描述 棋盘上 A 点有一个过河卒&#xff0c;需要走到目标 B 点。卒行走的规则&#xff1a;可以向下、或者向右。同时在棋盘上 C 点有一个对方的马&#xff0c;该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 棋盘用坐标表示&#xff…

【Tool】虚拟机安装与调试与设置与主机共享文件

前言 安装了vm17&#xff0c;实现了与主机文件共享&#xff0c; 步骤 下载虚拟机&#xff08;试用版&#xff09; Download VMware Workstation Pro 双击安装 暂不激活或者 使用如下激活码 KRNJX-22GXY-HCW46-MWYHY-YWRDB RDHTN-YFFKY-8YVR7-Q996Y-K74X3 N2XRH-GCH84-MV…

Linux系统上多文件C程序的编译与调试

一、先建立一个头文件add.h 通过vi创建一个add.h&#xff0c;并进行编写该文件&#xff0c;用来存放求和函数add()的声明&#xff1a; 二、建立一个add.c文件 通过vi创建一个add.c文件&#xff0c;并进行编写&#xff0c;用来存放求和函数add()的实现&#xff1a; 三、建立一…

写给 Android 应用工程师的 Binder 原理剖析

一. 前言 这篇文章我酝酿了很久&#xff0c;参考了很多学习文档&#xff0c;读了很多源码&#xff0c;却依旧不敢下笔。生怕自己理解上还有偏差&#xff0c;对大家造成误解&#xff0c;贻笑大方。又怕自己理解不够透彻&#xff0c;无法用清晰直白的文字准确的表达出 Binder 的…