【每日c++训练】2022年11月28日

一、LocalMaxima

源文件: LocalMaxima.*

输入文件: LocalMaxima.in

输出文件: LocalMaxima.out

时限: 1S

给出一个排列,如果其中一个数比它前面的数都大,则称为“Local Maxima”。

现在问在一个随机给出的排列中,期望有多少个数为“Local Maxima”。

输入

一个正整数n,表示排列为1..n的一个排列。

输出

一个随机1..n的排列,会有多少个数为“Local Maxima”。答案四舍五入保留8位小数。

样例

LocalMaxima.in

2

LocalMaxima.out

1.50000000

样例解释

1,2排列一共有两种:1,2;2,1。前者两个数都为“Local Maxima”,后者仅有第一个数2为“Local Maxima”。

数据范围

对30%的数据,n<=10。

对80%的数据,n<=1,000,000。

对100%的数据,n<=2^31-1。

二、LongestRegularBracketsSequence

源程序

LongestRegularBracketsSequence.*

输入文件

LongestRegularBracketsSequence.in

输出文件

LongestRegularBracketsSequence.out

时限: 1S

对一个由(,),[,]括号组成的字符串,求出其中最常的括号匹配子串。

具体来说,满足如下条件的字符串成为括号匹配的字符串:

1. (),[]是括号匹配的字符串

2. 若A是括号匹配的串,则(A),[A]是括号匹配的字符串串。

3. 若A,B是括号匹配的字符串,则AB也是括号匹配的字符串。

例如:(),[],([]),()()都是括号匹配的字符串,而][,[(]),(]则不是。

字符串A的子串是指有A中连续若干个字符组成的字符串。

例如,A,B,C,ABC,CAB,ABCABC都是ABCABC的子串。空串是任何字符串的子串。

输入

输入一行,为一个仅由()[]组成的非空字符串。

输出

输出也仅有一行,为最长的括号匹配子串。若有相同长度的子串,输出位置靠前的子串。

样例:

LongestRegularBracketsSequence.in

([(][()]]()

LongestRegularBracketsSequence.out

[()]

LongestRegularBracketsSequence.in

())[]

LongestRegularBracketsSequence.out

()

数据范围:

对20%的数据,字符串长度<=100。

对50%的数据,字符串长度<=10,000。

对于100%的数据,字符串长度<=1,000,000。

三、MagicFingerprint

源程序: MagicFingerprint.c/cpp/pas

输入文件: MagicFingerprint.in

输出文件: MagicFingerprint.out

时限: 2 S

对于任意一个至少两位的正整数n,按如下方式定义magic(n):将n按十进制顺序写下来,依次对相邻两个数,写下差的绝对值。这样,得到了一个新数,去掉前导0,则定义为magic(n)。若n为一位数,则magic(n)=n。

例如:magic(5913)=482,magic(1198=081=81,magic(666)=00=0。

对任意一个数n,序列:n,magic(n),magic(maigc(n)),...迟早会变成一个一位数。最后的这个值称为数n的magic指纹。

例如,对于n=5913,我们得到序列:5913,482,46,2。所以5913的magic指纹为2。

若一个数的magic指纹为7,则认为这个数是个幸运数。

现在,给定A,B,计算出[A,B]中有多少个数是幸运数。

输入

输入两行,每行一个数。第一行是A,第二行表示B。

输出

输出[A,B]中有多少个数是幸运数。

样例

MagicFingerprint.in

1

9

MagicFingerprint.out

1

数据范围:

对于30%的数据,B<=10000。

对于100%的数据,0<A<=B<=1,000,000,000。

四、Olympic

源文件: Olympic.c/cpp/pas

输入文件: Olympic.in

输出文件: Olympic.out

时限: 依标程速度而定

奥运会正在如火如荼的进行着,奖牌榜上也有许多队伍需要排名。你需要选择三个整数Pg,Ps和Pb,分别表示每获得一块金、银、铜牌所对应得分。并且满足1000>=Pg>=Ps>=Pb>=1。队伍将依据他们获得的分数进行排序(高分在前)。现在,为了使你所在的队伍排名尽可能的靠前,由你来选择Pg,Ps和Pb。

输入

第一行一个整数n(1<=n<=15),表示有n支队伍进行排名。

以下n行,每行三个整数G,S,B(0<=G,S,B<=100000),表示每支队获得的金、银、铜牌个数。

输出

一行输出三个数Pg,Ps,Pb,中间用空格隔开。

Hint:

1.第一支队伍即为你所在的队伍。

2.相同分数下,你所在的队伍排名为最前。

3.若有多组解,则输出Pg最小的解,若仍有多组,则输出Ps最小的解,若还有多组解,输出Pb最小的解。

样例:

Olympic.in

3

1 1 1

0 1 2

2 1 0

Olympic.out

1 1 1

Olympic.in

3

0 3 0

0 0 4

3 0 0

Olympic.out

2 2 1

数据范围:

对于10%的数据,保证最优解的Pg<=10。

对于30%的数据,保证最优解的Pg<=100。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值