小苯的九宫格,小苯的好数组(排序),小苯的数字合并(字典树,前缀和)

2024-05-27 23:12

本文主要是介绍小苯的九宫格,小苯的好数组(排序),小苯的数字合并(字典树,前缀和),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小苯的九宫格

题目描述

 

运行代码

#include<iostream>
using namespace std;
int main(){int a[10];for(int i=1;i<=9;i++){cin>>a[i];} string b;cin>>b;for(int i=0;i<b.size();i++){int p=b[i]-'0';cout<<a[p];}
}

代码思路

  1. 定义数组:首先,定义了一个整型数组a,用于存储10个整数。但需要注意的是,在C++中,数组的索引通常从0开始,而不是从1开始。然而,这里的循环是从1开始的,这意味着数组的第一个元素a[0]没有被使用。

  2. 输入数组:通过一个for循环,从a[1]a[9]输入9个整数。这意味着a[0]的值是未定义的(可能包含垃圾值)。

  3. 输入字符串:接着,代码读取一个字符串b

  4. 处理字符串并输出数组元素:再次使用一个for循环遍历字符串b的每一个字符。

    • 在循环内,首先将字符b[i]转换为其对应的整数p。这是通过从字符中减去字符'0'的ASCII值来实现的。在ASCII中,数字字符'0'到'9'是连续的,所以这种减法可以得到字符所代表的整数值。
    • 然后,代码尝试输出数组a中索引为p的元素。但是,由于之前的数组输入是从1开始的,如果b中的某个字符表示的数字是0(即p为0),则程序会尝试访问a[0],这是一个未定义的值。此外,如果b中的某个字符表示的数字大于9(即p大于9),则程序会访问数组a的越界位置,这会导致未定义行为(通常是程序崩溃)

小苯的好数组(排序)

题目描述

 

运行代码

#include<iostream>
#include<vector>
using namespace std;
inline int FN(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-f;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f; 
}
int a[200010];
signed main(){int n=FN();for(int i=1;i<=n;i++)a[i]=FN();bool o=0;for(int i=1;i<=n;i++)o|=(a[i]<a[i-1]);if(o)cout<<n<<endl;else cout<<0;return 0;
}

代码思路

  1. FN 函数
    这是一个用于读取整数的函数,它可以处理正数和负数。

    • 首先,它初始化一个整数 x 为 0 和一个标志 f 为 1(用于处理负数)。
    • 然后,它读取一个字符 c 并检查它是否是数字。如果不是,它会继续读取直到找到数字或负号。
    • 如果找到负号,它将 f 设置为 -1。
    • 接下来,它会读取所有的数字字符,并将它们转换为整数。
    • 最后,它返回 x * f,这样如果 f 是 -1,那么 x 就会被取反。
  2. 主函数

    • 首先,它使用 FN 函数读取一个整数 n,表示要读取的整数数量。
    • 然后,它使用一个 for 循环读取 n 个整数并存储在数组 a 中。注意,这里从 a[1] 开始存储,但数组通常从 a[0] 开始。
    • 接下来,它使用一个布尔变量 o 来跟踪数组是否是降序的。它初始化为 false(在C++中,bool 类型的 0 被视为 false)。
    • 它再次使用一个 for 循环遍历数组,并检查每个元素是否小于其前一个元素。如果是,它将 o 设置为 true。但是,这里有一个潜在的问题:当 i=1 时,a[i-1] 实际上是 a[0],而 a[0] 没有被初始化或赋值,这可能导致未定义的行为。
    • 最后,根据 o 的值,它输出 n 或 0

小苯的数字合并(字典树,前缀和)

题目描述

 

运行代码

#include <bits/stdc++.h>
#include<iostream>
using namespace std;
int main()
{int n;cin>>n;int a[200005];long long sum[200005];sum[0]=0;for(int i=1;i<=n;i++){cin>>a[i];sum[i]=sum[i-1]+a[i];}long long ans=0;if(n==1){return 0;}long long m=1e9;for(int i=1;i<=n;i++){if(a[i]<m){m=a[i];}ans=max(sum[n]-sum[i]-m,ans);ans=max(sum[i-1]-a[i],ans);}cout<<ans;return 0;
}

代码思路

  1. 输入与初始化:输入整数n,表示序列的长度。定义数组a[200005]存储序列中的每个元素。

    定义数组sum[200005]用于存储序列的累积和,其中sum[i]表示序列前i个元素的和。初始化sum[0]=0
  2. 读取序列与计算累积和:读取序列中的每个元素a[i],并计算累积和数组sum,使得sum[i] = sum[i-1] + a[i]

  3. 寻找分割点以最大化“不完美度”

    • 初始化变量ans为0,用于记录最大的“极差”。
    • 用一个变量m来追踪到目前为止序列中的最小值,初始值设为1e9(一个很大的数,确保任何正整数都会比它小)。
    • 遍历序列,对于每个位置i(从1到n):更新m为当前位置i处的元素a[i]和当前最小值m中的较小者。计算两种分割情况下的“不完美度”:第一种情况:分割点在i,左边部分的不完美度为当前m,右边部分的不完美度由累积和计算得来,即sum[n] - sum[i] - m
      • 第二种情况:实际上是一种特例,当分割点在i左侧的最后一个位置时,左边所有元素的总和减去a[i]
      • 更新ans为上述两种情况中的较大值。
  4. 输出结果:循环结束后,ans中存储了最大的“差”,将其输出。

这篇关于小苯的九宫格,小苯的好数组(排序),小苯的数字合并(字典树,前缀和)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008869

相关文章

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

基于Python实现数字限制在指定范围内的五种方式

《基于Python实现数字限制在指定范围内的五种方式》在编程中,数字范围限制是常见需求,无论是游戏开发中的角色属性值、金融计算中的利率调整,还是传感器数据处理中的异常值过滤,都需要将数字控制在合理范围... 目录引言一、基础条件判断法二、数学运算巧解法三、装饰器模式法四、自定义类封装法五、NumPy数组处理

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问