青少年编程知识记录 codecoming

【题解】滚动的榜单

【题目描述】某比赛的成绩,是依次出现的,而每个选手的成绩依次公布的时候,榜单都会刷新一遍,就能看到该选手在当前榜单加入时,所在的名次。下面给出了榜单选手的成绩,这里想知道,对于某个选手,求该选手在加入榜单时,所处的名次。【输入格式】第一行是一个数字n(n<3000),代表选手的数量接下来一行,共n个数,表示选手的成绩接下来一个数i,表示输出选手i【输出格式】一个数,表示加入榜单时,选手的名次【样例输入】复制6  95 92 93 100 
作者:亿万年的星光 分类:题解目录 浏览:

【题解】最大配对

题目描述      给出2个序列A={a[1],a[2],…,a[n]},B={b[1],b[2],…,b[n]},从A、B中各选出n个元素进行一一配对(可以不按照原来在序列中的顺序),并使得所有配对元素差的绝对值之和最大。输入格式输入的第1行为1个整数n 第2行包含n个整数,题目中的A序列。  第3行包含n个整数,题目中的B序列。 输出格式一个数,最大配对样例输入复制4 2 5 6 3 1 4&nbs
作者:亿万年的星光 分类:题解目录 浏览:

【题解】自动晾衣机

【题目描述】

有一个环形可以晾衣服的衣架,有若干个夹子组成,它可以晾不同长度的衣服(占用多个夹子),并且每两件衣服中间要有一个空夹子作为空位,下面需要依次晾干几件长度不一的衣服,请你给出某个夹子的使用情况。

【输入格式】

第一行一个数n,表示晾衣架的长度。(n<100000)

接下来有若干条数据,每条数据第一行若干个数(数据保证不会占满n),表示衣服的长度

第二行一个数 i,表示要查询 i 位置的使用情况

【输出格式】

输出第x位置夹子的状态

对于每个数据,输出一个状态占一行,其中使用0表示未使用,1表示有衣服,2表示格子用于隔开衣服。

【样例输入】

50 2 33 2 34 3 25 2 1 50

【样例输出】

2 0



作者:亿万年的星光 分类:题解目录 浏览:

【题解】金银岛

题目描述某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有s个种类, 每种金属重量不同,分别为n1,n2,...,ns,同时每个种类的金属总的价值也不同,分别为v1,v2,...,vs。KID想一次带走价值尽可能多的金属,问他最多能带走价值多少的金属。注意到金属是可以被任意分割的,并且金属的价值和其重量成正比。输入格式第1行是测试数据的组数kk,后面跟着kk组输
作者:亿万年的星光 分类:题解目录 浏览:

【题解】流感传染

【题目描述】

有一批易感人群住在网格状的宿舍区内,宿舍区为n\*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。

【输入描述】

第一行一个数字n,n不超过100,表示有n*n的宿舍房间。

接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。

接下来的一行是一个整数m,m不超过100。

【输出描述】

输出第m天,得流感的人数。

【样例输入】

5  ....#  .#.@.  .#@..  #....  .....  4

【样例输出】

16
作者:亿万年的星光 分类:题解目录 浏览:

数列分段

题目描述

对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求。

输入格式

第1行包含两个正整数N,M,表示了数列A[i]的长度与每段和的最大值;

第2行包含N个空格隔开的非负整数A[i],如题目所述。

输出格式

一个正整数,输出最少划分的段数。

样例输入

5 6   4 2 4 5 1

样例输出

3

提示

【数据范围】

对于20%的数据,有N≤10

对于40%的数据,有N≤1000

对于100%的数据,有N≤100000,M≤109M大于所有数的最小值,A[i]之和不超过109





作者:亿万年的星光 分类:题解目录 浏览:

线段

题目描述

在一个数轴上有n条线段,现选取其中k条线段使得这k条线段两两没有重合部分,问最大的k为多少?

输入格式

第一行为一个正整数n,下面n行每行2个数字ai,bi描述每条线段。

输出格式

输出文件仅包括1个整数,为k的最大值。

样例输入

3  0 2  2 4  1 3

样例输出

2

提示

【数据规模】

对于20%的数据,n≤10

对于50%的数据,n≤1000

对于70%的数据,n≤100000

对于20%的数据,n≤1000000,0≤ai<bi≤1000000



作者:亿万年的星光 分类:题解目录 浏览:

糖果传递

题目描述

n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1

输入格式

第一行一个正整数n≤1000000,表示小朋友的个数.

接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数.

输出格式

求使所有人获得均等糖果的最小代价。

样例输入

4  1  2  5  4

样例输出

4
作者:亿万年的星光 分类:题解目录 浏览:

家庭作业

题目描述老师在开学第一天就把所有作业都布置了,每个作业如果在规定的时间内交上来的话才有学分。每个作业的截止日期和学分可能是不同的。例如如果一个作业学分为10,要求在6天内交,那么要想拿到这10学分,就必须在第6天结束前交。每个作业的完成时间都是只有一天。例如,假设有7次作业的学分和完成时间如下:作业号  1 2 3 4 5 6 7期限      1 1 3 3 2 2 6学分      6 7 2 1 4 5 1最多
作者:亿万年的星光 分类:题解目录 浏览:

【算法】单调栈

一、单调栈

单调栈(Monotonic Stack)是一种特殊的栈结构,其核心思想是维护栈内元素的单调性(单调递增或单调递减)。单调栈通常用于解决与元素大小关系相关的问题,例如:

  1. 找到数组中每个元素的下一个更大(或更小)元素。

  2. 计算数组中每个元素左边或右边的第一个更大(或更小)元素。

  3. 解决与区间最值相关的问题(如最大矩形面积)。



二、特点

  1. 单调性:栈内元素始终保持单调递增或单调递减。

  2. 操作规则:

    如果新元素满足单调性,直接压入栈。

  3. 如果新元素破坏了单调性,则弹出栈顶元素,直到满足单调性为止。

  4. 时间复杂度:由于每个元素最多入栈和出栈一次,因此时间复杂度通常为O(n)



三、应用场景

  1. 下一个更大元素:

    给定一个数组,找到每个元素的下一个更大元素。

  2. 每日温度:

    给定一个温度数组,计算每天需要等待多少天才能遇到更高的温度。

  3. 最大矩形面积:

    给定一个柱状图,计算其中最大的矩形面积。

  4. 滑动窗口最大值:

    在滑动窗口中快速找到最大值。

四、步骤

以找到数组中每个元素的下一个更大元素为例:

  1. 初始化:创建一个空栈和一个结果数组。

  2. 遍历数组:

    • 如果当前元素大于栈顶元素,则栈顶元素的下一个更大元素就是当前元素。

    • 弹出栈顶元素,并更新结果数组。

    • 重复上述过程,直到当前元素小于等于栈顶元素或栈为空。

    • 将当前元素压入栈。

  3. 处理剩余元素:遍历结束后,栈中剩余的元素没有下一个更大元素,将其结果设置为 -1

作者:亿万年的星光 分类:算法 浏览: