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

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

相关文章

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

hdu 1285(拓扑排序)

题意: 给各个队间的胜负关系,让排名次,名词相同按从小到大排。 解析: 拓扑排序是应用于有向无回路图(Direct Acyclic Graph,简称DAG)上的一种排序方式,对一个有向无回路图进行拓扑排序后,所有的顶点形成一个序列,对所有边(u,v),满足u 在v 的前面。该序列说明了顶点表示的事件或状态发生的整体顺序。比较经典的是在工程活动上,某些工程完成后,另一些工程才能继续,此时

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

POJ2001字典树

给出n个单词,求出每个单词的非公共前缀,如果没有,则输出自己。 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;