比赛链接:https://ac.nowcoder.com/acm/contest/7612
#A-购物
#题面
#题目描述
超市进行了买 k 送一的活动,商品的单价是 x 元,牛妹想至少买 n 件商品, 输出最少需要花费多少钱。
#输入描述
第一行一个整数 ,表示 组数据。
接下来 T 行,每行 3 个整数
#输出描述
对于每组数据输出一行表示答案。
#样例
样例输入 #1
3
3 2 1
10 3 4
5 3 2
样例输出 #1
2
32
8
#思路
签到题,模拟即可。
#代码
1 |
|
#B-交换
#题面
#题目描述
给一个长度为 的 01 序列 ,现在可以至多进行 1 次如下操作: 选择 ,将 序列变成
输出最长的全为 的子区间长度。
#输入描述
一个 01 字符串,表示序列 。()
#输出描述
输出一个整数表示答案。
#样例
样例输入 #1
1001
样例输出 #1
2
样例输入 #2
11111
样例输出 #2
5
样例输入 #3
10111010
样例输出 #3
3
#思路
给定的字符串首尾相接就会成一个环,那么可以破环成列,在 s
的末尾在添加一个 s
,以样例 10111010
为例,处理过后则变成了 1011101010111010
,那么这样就可以找出最长的全为 的子区间长度。
注意当给定的字符串全为 时,有可能会出现 的情况,按照题意, ,所以当 为 '1'
时,递推式为 。
最终的答案就是
#代码
1 |
|
#C-最少移动
#题面
#题目描述
给一个长度为 的正整数序列 ,每次操作可以选择两个相邻的位置,让一个元素 另一个元素 ,输出最少几次操作,能让所有元素相等,如果不可能实现,请输出 -1
。
#输入描述
第一行一个整数 ,表示 组数据。
每组数据第一行一个整数 ,第二行 个数字表示 序列,
#输出描述
对于每组数据,输出一个整数表示答案。
#样例
样例输入 #1
3
3
1 3 2
3
2 2 3
5
1 2 3 1 3
样例输出 #1
1
-1
3
#思路
这道题可以用前缀和做。
为序列元素, 为前缀和元素。
不难发现,当 时, ,而 不变。 同理,当 时, ,而 仍不变。
当 中所有元素相等时, 一定是一个等差数列。
举个例子:
所以可以得到结论:当 时, 中的元素不可能成等差数列,因此 中的元素不可能相等,无解。 反之则有解。
由上方发现的规律可知:在变换过程中, 总是不变的,因此可以自后向前逆推:设公差为,则 ,所以将 变成 所需的步数为 。
提示:此题必须开 long long!
#代码
1 |
|
#D-飞行棋
#题面
#题目描述
牛牛在玩飞行棋。
有无限个格子排成一行,从左到右,标号为 终点为 ,有一架飞机一开始在 号位置。
排骨龙每回合可以先投掷一次 面的骰子,1 到 等概率出现。
投出点数 后,飞机会移动 步,每步移动一格,方向初始向左移动,若到达终点,会向右移动。 若投出的点数为 点,可以继续投掷,直到投出的点数不是 点。 求让这架飞机停在终点回合数的期望。
#输入描述
第一行一个数字 表示 () 组数据。
接下来每行两个正整数
#输出描述
输出 T 行,每行保留两位小数输出答案。
#样例
样例输入 #1
6
1 6
2 6
3 6
4 6
5 6
6 6
样例输出 #1
5.00
5.00
5.00
5.00
5.00
5.17
#思路
设 为从 走到 的 步数。
- 当 时,
- 当 时, 期望为 。
#代码
1 |
|