秋招笔试编程题(之二)

1、[度小满][数字的情绪]每个整数都希望可以整除很多数字,特别是它自身包含的数字,我们将整数分为三类:1)数字可以整除它包含的一部分数字,比如72,由7和2两种数字组成,72可以整除2,我们称这个数字是开心的,用“H”表示;2)数字不能整除它包含的任何数字,比如73,由7和3两种数字组成,73不能整除任何数,我们称这个数是沮丧的,用“S”表示;3)数字可以整除它包含的所有数字,比如12,既可以整除1又可以整除2,我们称它是一个非常棒的数,用G表示。(0可以被任何数整除)

输入:输入第一行包含一个整数T,表示数据组数(1<=T<=100)。接下来T行,每行包含一个正整数n(1<=n<=10^12),表示需要你判断的数字。

输出:对于每组测试数据输出一行,"H","S"或“G”,表示整数种类。

样例输入

3

72

73

12

样例输出

H

S

G

2、[度小满][小游戏]有一天,小A和小B玩了一个神奇的游戏,游戏开始时,桌面上有a0个不同盒子和b0个不同物品,每个回合,两人可以选择增加一个新的盒子或者一个新的物品(所有物品和盒子都不同),记当前桌子上的盒子数量为a,物品数量为b,当把b个物品放入a个盒子的方案数不小于n时,游戏结束,此时最后一位操作者判负。给出a0,b0,n,如果小A先手,两个人都用最优策略,谁能获胜,如果A获胜输出“A”,如果B获胜输出“B”,如果是平局,输出“A&B”。

输入:输入第一行是一个数据组数T(T<=10)。接下来T行,每行描述一个测试数据,包含三个整数a0,b0,n(1<=a0<=10000,1<=b0<=30,2<=n<=10^9)。分别表示桌子上初始的盒子数,球数和n值。

输出:对于每个测试数据,输出一行,仅包含一个字符串,即“A”“B”或“A&B”.

样例输入

3

2  2  10

3  1  4 

1  4  10

样例输出

B

A

A&B

3、[度小满][链式边权]n个点练成一条链,从左往右依次从1到n编号。相邻点之间有边相连,一共有n-1条边。所有边从1到n-1编号,第i条边连接了点i和i+1.第i个点有点权ai,定义第i条边的权zhong为wi:有多少点对x,y满足在第i条边的左侧(x<=i),y在第i条边的右侧(y>i),且x和y的点权不同。给出每个点的点权,请求出所有边的边权。

输入:第一行输入一个数n。(2<=n<=100000)   第二行输入n个数,a1,a2,...,an(1<=ai<=10^9)

输出:输出n-1个数,一次为每条边的权重,不要在行末输出多余的空格。

样例输入

3

1 2 1

样例输出

1 1

4、[商汤][去除路径中的环]旅行者从地图上X市旅行到Y市,途中可能经过多个城市,不同的城市以数字区分。要求,从输入中去除路径中可能存在的“环”后,输出路径长度。(注:不存在相交的环的情况)

输入描述:X->n1->n2->...->nK->Y。其中ni为途中经过的城市id(大于0且在32位有符号数范围内:0<=n0<=2^31-1),K为城市数量,K>=0。

输出描述:Number(取出环后的路径长度)

示例

输入

X->2->6->3->12->6->8->Y

输出

4

说明:输出路径为X->2->6->8->Y,4为对应的长度。

备注:输入路径中城市数目N<100000,可能存在的环的数目M<10.

5、[商汤][抢硬币]有一天,小商拿到了很多不同面额的硬币,就对小汤和小AI说,我们来玩个游戏吧。然后小商就把硬币排成一列,对小汤和小AI说:“现在我们三个人开始轮流取硬币,但每次只能从这个硬币列的头或尾取走一枚,直到取完所有硬币,看谁手上的硬币面额之和最大”。机智的小商二话不说就说他先取了,但是小汤和小AI也是很聪明,虽然后手取,他们也会采取最优的策略去取硬币,此外,他们三人还约定,如果在某次取硬币的时候,无论,从左边取还是从右边取,他们所能得到的最终硬币面额都一样的话,那么他们会取左边的硬币。聪明的小伙伴啊,请告诉大家,先手的小商能取到的硬币面额之和最大为多少呢?

输入描述:一个整数N,代表有N个硬币,接下来一行是N个以空格分割的整数Ai,从左到右排列,代表排列好的硬币的面额,其中0

输出描述:小商能取到的硬币面额之和最大值。

示例1

输入

3

1 3 5

输出

5

示例2

输入

4

2 9 5 2

输出

4

说明:无论小商怎么取,在同样聪明的小汤和小AI面前,他只能取到两个面额为2的硬币,最终得分4,但是,按照三人的约定,小商一定要先取左边的2,并在小汤和小AI分别取走9和5之后取得右边的2。

6、[商汤][寻找数据的主群落]铁柱在研究城市里小黄车的分布。他惊讶地发现,城市里面总是有一个区域密集地聚集了30%的小黄车。而不在这个区域的小黄车,要不是离散分布的,要不是聚集称较小的、较稀疏的群落(不足30%)。铁柱希望能够用算法找到群落中的所有车辆,并标记为1,其他车辆标记为0.

输入描述:第一行会有一个N,表示小黄车的数量。(测试样例中200

输出描述:按顺序输出每一辆车的标签,属于主群落的车辆标记为1,不属于主群落的车辆标为0.

示例

输入

20

1 1

0 0

0 1

-200 -100

-200 0

-200 100

-100 -100

-100 0

-100 100

0 -100

0 100

100 -100

1000

100 100

200 -100

200 0

200 100

2 1

2 0

1 0

输出

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

备注:以预测结果的F1值作为评分标准。每个测试样例0.7<=F1<0.8记一分,0.8<=F1<0.9记2分,0.9<=F1记三分。

提示:输出结果一定是30%的1和70%的0。

7、[最大不重复子串]给定一个字符串,找出其中无重复字符的最长子字符串的长度。例如,“abcabcbb”,其无重复的最长子字符串是“abc”,其长度为3.“bbbbb”,其无重复字符的最长子字符串为“b”,长度为1.

输入描述:一个字符串

输出描述:一个整数

示例

输入

abc

输出

3

8、我们部门需要装饰墙,但是墙非常非常的长,有一千万米。我们会按顺序贴很多海报在上面,这些海报相互之间会重叠,请问下,最后还能看到哪些?(只有一部分也算)

输入描述:N表示N张海报。接下来每一行代表海报的左右边界(上下默认全满),Li,Ri均为整数,大于0,小于一千万。海报按输入顺序张贴。

输出描述:有多少张海报是可见的。

示例

输入

5

1 4

2 6

8 10

3 4

7 10

输出

4

9、随着公司的快速发展,基层团队越来越多,近期公司希望对部门重新做个划分,尽可能把紧密合作的团队放到一个部门。给定一个MxM的二维数组,每个值1的元素代表一个团队。如果2个团队在上下或左右的方向上相邻,说明两个团队有紧密合作关系,需要把紧密合作的团队放到一起,形成一个部门;没有合作关系的团队,放到不同部门。判断给定输入中,有多少个部门。

例如,给定一个二维数组: 

1 0 0 1 1

1 0 0 1 1

0 0 1 0 0

0 0 1 0 0

0 0 1 0 0

其中有9个团队,一共需要组成3个部门,分别是

1

1

以及

1 1

1 1

以及

1

1

1

输入描述:第一行一个整数M,后面M行,每行M个整数(取值0或1).

输出描述:一个整数,表示部门数量。

示例

输入

4

1 0 0 0

0 0 0 0

0 0 0 1

0 0 0 0

输出

2

10、[IP还原]工程师小张的代码出Bug了。在上报用户IP的时候,漏掉了“.”符号,例如10.0.0.1变成了10001。请你帮校长对这些一场数据进行处理,还原出所有可能的原始IP,输出可能的原始IP的数量。

输入描述:第一行一个字符串,代表抹掉“.”符号的IP。

输出描述:一行,一个整数,表示答案

示例

输入

8888

输出

1

11、[抖音红人]抖音工程师想要找到抖音里的红人。假设用户数为N,有M个关注关系对(A,B)。(A,B)表示用户A关注了用户B。关注关系具有传递性,例如:用户A关注了用户B,用户B关注了用户C,那么认为用户A简介关注了用户C。如果一个用户被所有N个用户直接或间接关注,那么我们认为这个用户就是抖音红人。求抖音红人的总数。

输入描述:第一行一个整数N,第二行一个整数M,第三行空格分隔的M*2个整数,代表关注关系对。

输出描述:一行一个整数,表示答案。

示例

输入

3

3

1 2 2 1 2 3

输出

1

备注:1<=N<=10^4,1<=M<=5*10^4,1<=A,B<=N

12、[善变的同伴]又到了吃午饭的时间,你和你的同伴刚刚研发出了最新的GSS-483型自动打饭机器人,现在你们正在对机器人进行功能测试。为了简化问题,我们假设午饭一共有N个菜,对于第i个菜,你和你的同伴对其定义了一个好吃程度(或难吃程度,如果是负数的话......)A[i],由于一些技术限制,机器人一次只能接受一个指令:两个数L,R——表示机器人将会去打L~R一共R-L+1个菜。本着不浪费的原则,你们决定机器人打上来的菜,含着泪也要都吃完,于是你们希望机器人打的菜的好吃程度之和最大。然而,你善变的同伴希望对机器人进行多次测试(实际上可能是为了多迟到好吃的菜),他想知道机器人打M次菜能达到的最大的好吃程度之和。当然,打过一次的菜是不能再打的,而且你也可以对机器人输入-1,-1,表示一个菜也不打。

输入描述:第一行N,M;第二行A[1],A[2],...,A[N].

输出描述:一个数字S,表示M次打菜的最大好吃程度之和。

示例1

输入

7 2

1 2 3 -2 3 -10 3

输出

10

说明

[1 2 3 -2 3] -10 [3]

示例2

输入

7 4

1 2 3 -2 3 -10 3

输出

12

说明

[1 2 3] -2 [3] -10 [3]

第四次给机器人-1,-1的指令

备注:

N<=10^5=100000

|A[i]|<=10^4=10000

10%数据M=1

50%数据M<=2

80%数据M<=100

100%数据M<=10^4=10000

你可能感兴趣的:(C/C++)