走出浪浪山
内存限制:512Mb
时间限制:1s
提交:8414
解决:2678
题目描述
走出浪浪山,发现到处都是浪浪山。
Alice 是一个可爱的小猪妖,最讨厌造箭,但妖怪大王命令小猪妖一天内审核这一堆箭中有几根不符合要求。
Alice 需要将这一堆箭顺序排开,挑出其中不符合要求的箭,其中我们用数字11表示这是一根符合要求的箭,用00表示这是一根不符合要求的箭。
对于这一堆打包好的箭,我们用一个不超过 unsigned int表示范围的数字表示,其中 『将这一堆箭顺序排开』 可以理解为将其十进制数值转化为二进制。
注意,其中箭的个数指的是其二进制下最高位11开始计数的长度,不包含额外补的00。
请你帮帮Alice,早日走出浪浪山。
输入
一行,一个整数 nn,表示一堆箭。
输出
输出一行整数,表示答案。
样例输入1
复制
7
样例输出1
复制
0
样例输入2
复制
8
样例输出2
复制
3
提示
数据范围
对于 100 \%100% 的数据,1 \leqslant n \leqslant 2^{32}-11⩽n⩽232−1。
样例解释
77,在表示为二进制后,数值是111111,共3根箭,故没有不合格的箭。
88,在表示为二进制后,数值为10001000,共4根箭,故不合格的箭个数为33。
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const long long N = 1e8;
long long n;
int main(){
cin >> n;
long long count = 0;
if(n % 2 == 0){
count += 1;
}
while(n != 1){
long long temp = n;
if((temp / 2) % 2 != 0){
n /= 2;
continue;
}
else{
n /= 2;
count ++;
}
}
cout << count << endl;
}
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const long long N = 1e8;
long long n;
int main(){
cin >> n;
long long count = 0;
if(n % 2 == 0){
count += 1;
}
while(n != 1){
long long temp = n;
if((temp / 2) % 2 != 0){
n /= 2;
continue;
}
else{
n /= 2;
count ++;
}
}
cout << count << endl;
}
交流是一件很酷的事情
内存限制:512Mb
时间限制:1s
提交:6836
解决:621
题目描述
古老的王国中有 nn 个城市,这些城市之间由 mm 条道路相连接。现在又到了一年一度要举行交流会的时候,国王计划要在这些城市之间举行 kk 场交流会,每一场交流会在指定的两个城市间举行。
每个城市都有独一无二的思想,思想只有通过交流才能够流通,交流是一个相互并且可以传到的过程,比如说,如果城市 aa 和城市 bb 进行了交流,那么城市 aa 和城市 bb 就都拥有了对方的思想;如果城市 bb 和城市 cc 又有交流,那么城市 aa、bb、cc 就都有三份思想。
然而,你作为王国的军师,充分明白复习的重要性,在收到了国王的计划之后,你深知如果城市 aa 有了城市 bb 的思想,但是两个城市之间不能相互到达,即没有道路直接或者间接连接,那么他们就无法在交流会之后再次交流,在一段时间后他们就会忘记对方的思想。
国王想要知道在这些交流会很久之后,所有的城市中,最多能够有多少份思想、最少又能够有多少份思想。注意,每一个城市最初就有一个自己的想法。
输入
第一行两个整数 nn、mm,表示城市的数量和道路的数量。
接下来 mm 行,每行两个整数 u_{i}ui、v_{i}vi,表示城市 u_{i}ui 和 v_{i}vi 之间有一条道路相连接。
接下来一行一个整数 kk,表示交流会的数量。
接下来 kk 行,每行两个整数 x_{i}xi、y_{i}yi,表示预计在城市 x_{i}xi 和城市 y_{i}yi 之间举行一场交流会。
输出
输出一行两个整数 maxvmaxv 和 minvminv,表示城市最多的思想数量和最少的思想数量。
样例输入1
复制
8 6
1 3
1 4
2 7
3 5
3 6
3 8
5
1 3
1 8
2 3
2 7
4 6
样例输出1
复制
3 1
提示
数据规模与约束
对于 100 \%100% 的数据,2 \leqslant n, m, k \leqslant 2 \times 10^{5},1\leqslant u_i,v_i,x_i,y_i \leqslant n2⩽n,m,k⩽2×105,1⩽ui,vi,xi,yi⩽n,保证无重边无自环。
样例解释
所有交流会结束后,每座城市有的思想如下:
- 城市 1:1、2、3、7、8
- 城市 2:1、2、3、7、8
- 城市 3:1、2、3、7、8
- 城市 4:4、6
- 城市 5:5
- 城市 6:4、6
- 城市 7:1、2、3、7、8
- 城市 8:1、2、3、7、8
而在原图中,[1,3,8][1,3,8] 联通,[2,7][2,7] 联通,[4,6][4,6] 联通。
所以在足够长的时间过后,各个城市拥有的思想会维持在以下状态:
- 城市 1:1、3、8
- 城市 2:2、7
- 城市 3:1、3、8
- 城市 4:4、6
- 城市 5:5
- 城市 6:4、6
- 城市 7:2、7
- 城市 8:1、3、8
故城市最多有 3 份思想(城市 1、城市 3、城市 8),最少只有 1 份思想(城市 5)。
观察火车
内存限制:512Mb
时间限制:1s
提交:11882
解决:1834
题目描述
小凯喜欢在铁路边观察火车。
众所周知,绝大多数铁路都使用双轨铁路,经过小凯的建模,他发现在模型中,如果两个轨道之间的间距满足 dis=a^2-b^2dis=a2−b2 ,其中a>ba>b,且是自然数,那么这个铁路就很“酷”。
现在小凯想知道,在轨道距离不超过 nn 的情况下,共有多少种很酷的间距。
因为火车轨道很宽,所以间距只能取从 11 开始的整数 。
输入
输入一个整数 nn 表示轨道间距最宽为 nn 米。
输出
输出一行一个整数表示答案。
样例输入1
复制
10
样例输出1
复制
7
提示
数据范围
对于 100 \%100% 的数据,1 \leqslant n \leqslant 10^{7}1⩽n⩽107。
样例解释
间距可取的值是 11、22、33、44、55、66、77、88、99、1010 ,其中很“酷”的间距数值是 11、33、44、55、77、88、99 ,所以答案为 77 。
其中
- 1=1^2-0^21=12−02
- 3=2^2-1^23=22−12
- 4=2^2-0^24=22−02
- 5=3^2-2^25=32−22
- 7=4^2-3^27=42−32
- 8=3^2-1^28=32−12
- 9=5^2-4^29=52−42
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<math.h>
using namespace std;
const long long N = 10000010;
long long n;
long long arr[N];
int main(){
cin >> n;
long long count = 0;
long long jishu = 0;
for(long long i = 1; i <= n; i++){
// if(2*i-1 > n){
// break;
// }
// else{
// arr[2*i-1] = 1;
// count++;
// }
for(long long j = i-1; i*i - j*j <= n && j>=0; j--){
long long dis = i*i - j*j;
if(dis <= n){
jishu++;
// cout <<i << " " << j <<" " << dis<< "计数:"<<jishu<<endl ;
// if(arr[dis] != 1){
arr[dis] = 1;
// count ++;
// }
}
}
}
for(long long i = 0; i <= n; i++){
if(arr[i] == 1){
count ++;
}
}
cout << count << endl;
}
可以自由规划真是太酷啦
内存限制:512Mb
时间限制:1s
提交:807
解决:43
题目描述
一座现代化的城市由密密麻麻的道路网格构成,从上往下俯瞰就像是一张庞大的纸上交错着若干条线条,我们这里只考虑最简单的规划情况,只考虑垂直道路和水平道路。
每一条水平道路代表一条平行于 xx 轴的道路,每一条垂直道路代表一条平行于 yy 轴的道路,根据汤汁村的地理条件,我们一共有 nn 条平行于 yy 轴的道路备选,有 mm 条平行于 xx 轴的道路备选。
一个城市规划优秀与否可以用“重面积”来评估。
在道路规划好后,我们要开始建设建筑,我们同样只考虑最简单的建筑,即矩形的建筑。一个建筑可以横跨多个道路,但是建筑的四周必须紧贴道路。
“重面积”就是所有可能的建筑物的面积总和。
用更加人话的话来说就是,每两条平行于 yy 轴的道路和两条平行于 xx 轴的道路可以确定一个矩形,“重面积“就是所有这些矩形的面积之和。
现在根据上级的要求和经费的限制,你需要恰好建设其中的任意 kk 条道路,请问如何选择可以使得城市的“重面积”最大?这个结果可能很大,请你对 10^{9} + 7109+7 取模输出。
输入
第一行三个整数 nn、mm、kk,
分别表示平行于 yy 轴的备选道路数、平行于 xx 轴的备选道路数和需要建设的道路数量。
接下来一行 nn 个整数 x_{1}, x_{2}, \dots, x_{n}x1,x2,…,xn,表示平行于 yy 轴的备选道路的 xx 坐标。
接下来一行 mm 个整数 y_{1}, y_{2}, \dots, y_{n}y1,y2,…,yn,表示平行于 xx 轴的备选道路的 yy 坐标。
输出
输出一行一个整数,表示最大的“重面积”取模过后的结果。
样例输入1
复制
5 5 8
1 4 2 6 8
-1 5 9 4 -3
样例输出1
复制
1050
提示
数据范围
对于 100 \%100% 的数据,2 \leqslant n, m \leqslant 10^{5}, 1 \leqslant k \leqslant 10^{4}, -10^{9} \leqslant x_{i}, y_{i} \leqslant 10^{9}2⩽n,m⩽105,1⩽k⩽104,−109⩽xi,yi⩽109。
数据不保证中间计算结果在 long long int 范围内,请考虑使用 __int128。
样例解释
平行与 yy 轴的道路我们选择 \left\{ 1, 2, 6, 8 \right\}{1,2,6,8},平行于 xx 轴的道路我们选择 \left\{ -1, 5, 9, -3 \right\}{−1,5,9,−3}。
则可能存在以下建筑:
- y: \left\{ 1, 2 \right\}, x: \left\{ -1, 5 \right\} \to 6y:{1,2},x:{−1,5}→6
- y: \left\{ 1, 2 \right\}, x: \left\{ -1, 9 \right\} \to 10y:{1,2},x:{−1,9}→10
- y: \left\{ 1, 2 \right\}, x: \left\{ -1, -3 \right\} \to 2y:{1,2},x:{−1,−3}→2
- \dots…
- y: \left\{ 2, 6 \right\}, x: \left\{ -1, 5 \right\} \to 24y:{2,6},x:{−1,5}→24
- \dots…
- y: \left\{ 6, 8 \right\}, x: \left\{ 9, -3 \right\} \to 24y:{6,8},x:{9,−3}→24
面积之和为 1050。
灵机一动给同学做点好菜
内存限制:512Mb
时间限制:1s
提交:277
解决:7
题目描述
你是一名特级厨师,你的身上有一本绝世秘籍,其中记载了 nn 种食材之间的 n - 1n−1 种绝配关系,每一个绝配关系可以描述为“食材 aa 和食材 bb 放在一起是真的绝配!”,我们称食材 aa 和食材 bb 为 1 级绝配。
如果食材 aa 和食材 bb 是绝配,食材 bb 和食材 cc 是 绝配,那么当食材 aa、bb、cc 同时搭配在一起时,也是绝配。我们保证任意两种食材都可以直接或者间接地成为绝配。
即食材之间的绝配关系构成了一棵树,食材之间的“绝配等级”是食材两点之间的距离。
在同学们的盛情和上级的指令下,现在你需要发明 mm 道新的美味佳肴,可是人哪能创新得那么快,头疼的你决定凭借你的灵机一动,,根据绝世秘籍去批量地胡乱创造这些菜品。
你首先为 mm 道菜每道都准备了 nn 种食材,随后你灵机一动了 qq 次,每一次,你考虑第 ll 道菜到第 rr 道菜,你将每道菜中可以使得食材 uu 和食材 vv 成为绝配的最少的食材打包成一个料理包。
如果他们本来就在一个料理包里了,就不用操作。如果食材 uu 和食材 vv 已经分别在不同的料理包中,我们就将两个料理包打包在一起。
即一个料理包就是把树上两个食材及其之间的最短路上的食材,全部看作一个点。
进行完 qq 次灵机一动后,各式各样的菜已经摆在了你的面前,并且都已经被你打包成了容易加工的料理包,这下可以很方便地给同学们去做了,但是作为特级厨师的你知道,这些菜还不是最好的,都有些遗憾,我们定义一道菜的遗憾值,为这道菜中任意两种食材 aa 和 bb 之间“绝配等级”的总和。
用不是那么人话的方式来说,遗憾值就是经过了打包后树上任意两点之间的距离之和。
你想知道每一道菜的遗憾值。
题意可以等价地理解为:
mm 张图,初始每张图都是一个相同的,nn 个结点的树。依次进行 qq 次操作,每次操作如下:
- 给定 l,r,u,vl,r,u,v。
- 将第 ll 个图到 rr 个图的从 uu 到 vv 的路径缩成一个点(如果已经在一个点中,则忽略该操作)。
定义一张图 G=(E,V)G=(E,V)的权值是
\sum_{\forall u,v \in V} dis_{u,v}∑∀u,v∈Vdisu,v
其中,dis_{u,v}disu,v 表示 uu 到 vv 的距离。在所有操作后,求出每一张图的权值。
输入
第一行两个整数 nn、mm、qq,表示食材的种数、需要准备的菜的数量和灵机一动的数量。
接下来 n - 1n−1 行,每行两个整数 uu、vv,表示食材uu 和食材 vv 之间是绝配。
接下来 qq 行,每行四个整数 l_{i}, r_{i}, u_{i}, v_{i}li,ri,ui,vi,表示一个灵机一动。
输出
输出 mm 行,每行一个整数 x_{i}xi 表示第 ii 道菜的遗憾值。
样例输入1
复制
7 10 5
1 2
2 3
3 4
3 5
2 6
5 7
2 6 4 5
2 10 5 6
6 10 6 1
1 2 4 2
4 5 5 4
样例输出1
复制
28
12
12
12
12
6
12
12
12
12
提示
数据范围
对于 100 \%100% 的数据,1 \leqslant n, m, q \leqslant 5 \times 10^{4}1⩽n,m,q⩽5×104。
样例解释
我们有 7 种食材,10 道菜和 5 个灵机一动。
在进行完 5 个灵机一动后,每道菜的情况:
- 1 号:食材 2、3、4 在一个调料包里
- 2 号:食材 2、3、4、5 、6在一个调料包里
- 3 号:食材 2、3、4、5 、6在一个调料包里
- 4 号:食材 2、3、4、5 、6在一个调料包里
- 5 号:食材 2、3、4、5 、6在一个调料包里
- 6 号:食材 2、3、4、5 、6在一个调料包里
- 7 号:食材 1、2、3、5 、6在一个调料包里
- 8 号:食材 1、2、3、5 、6在一个调料包里
- 9 号:食材 1、2、3、5 、6在一个调料包里
- 10 号:食材 1、2、3、5 、6在一个调料包里
九宫格
内存限制:512Mb
时间限制:1s
提交:6026
解决:2361
题目描述
小宁想用九宫格给她的朋友小谦发送英文短信,键盘布局如下
例如字母b需要按 22 两下,按空格就是按一下,请问小宁想发送一个句子的话,需要按多少下呢?
输入
一个句子,包含小写英文单词和空格。
输出
一个整数,表示要按键的次数。
样例输入1
复制
i miss you
样例输出1
复制
25
样例输入2
复制
how are you
样例输出2
复制
22
提示
数据范围
对于 100 \%100% 的数据,句子字符不超过200200个,且均以字母为结尾。
样例解释
样例说明1
ii需要按键33次,空格需要按键11次,mm需要按键11次,ss需要按键44次,yy需要按键33次,oo需要按键33次,uu需要按键22次,总按键次数3+1+1+3+4+4+1+3+3+2=253+1+1+3+4+4+1+3+3+2=25
样例说明2
hh需要按键22次,oo需要按键33次,ww需要按键11次,空格需要按键11次,aa需要按键11次,rr需要按键33次,ee需要按键22次,总按键次数2+3+1+1+1+3+2+1+3+3+2=222+3+1+1+1+3+2+1+3+3+2=22
来源/分类
有一些东西必不可少
内存限制:512Mb
时间限制:1s
提交:3784
解决:352
题目描述
你准备要出去旅游了!你整理着你的行囊,有好多好多东西你想带着,数了数一共有 nn 件,每一件物品在你的心中都有一个幸福指数 a_{i}ai,每一次旅行你可以选择其中一部分东西或者全部的东西带上。
你希望一场旅行的幸福指数之和要大于等于 kk,想要满足你的这个条件,有若干种选择物品的方案,如果某一个物品出现在了这些方案中,我们就说这个物品是“重要”的。
但是不是每一个“重要”的物品都是“必要“的,“必要”的物品是指,在某一个包含这个物品的选择方案中,如果缺少了这个物品,这个方案就不成立了,即不能够使得幸福指数之和大于等于 kk 了。
你想知道这些物品之中有哪一些是“必要”的。
输入
第一行两个整数 nn、kk,表示物品的数量和幸福指数之和的要求。
接下来一行 nn 个整数 a_{1}, a_{2}, \dots, a_{n}a1,a2,…,an,表示每个物品的幸福指数。
输出
输出一行一个整数,表示“必要”的物品数量。
样例输入1
复制
6 20
10 4 3 10 25 2
样例输出1
复制
3
提示
数据范围
对于 100 \%100% 的数据,1 \leqslant n, k \leqslant 5000,1 \leq a[i] \leq 10^91⩽n,k⩽5000,1≤a[i]≤109。
样例解释
对于每一个物品:
- 第一个物品 10 是必要的,因为在方案 10 10 中不能缺少;
- 第二个物品 4 不是必要的,因为在任何一个方案中都可以被去掉;
- 第三个物品 3 不是必要的,因为在任何一个方案中都可以被去掉;
- 第四个物品 10 是必要的,因为在方案 10 10 中不能缺少;
- 第五个物品 25 是必要的,因为在方案 25 2 中不能缺少;
- 第六个物品 2 不是必要的,因为在任何一个方案中都可以被去掉;
所以必要的物品有 3 个。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<math.h>
#include<string.h>
using namespace std;
const int N = 2100;
string input[N];
int count = 0;
int main(){
char c;
int n = 0;
do{
n++;
cin >> input[n];
}while(cin.get()== ' ');
count = n-1;
for(int i = 1; i <= n; i++){
for(int j = 0; j <= input[i].length(); j++){
cout << input[i][j] << endl;
switch(input[i][j]){
case ' ': count += 1; break;
case 'a': count += 1; break;
case 'b': count += 2; break;
case 'c': count += 3; break;
case 'd': count += 1; break;
case 'e': count += 2; break;
case 'f': count += 3; break;
case 'g': count += 1; break;
case 'h': count += 2; break;
case 'i': count += 3; break;
case 'j': count += 1; break;
case 'k': count += 2; break;
case 'l': count += 3; break;
case 'm': count += 1; break;
case 'n': count += 2; break;
case 'o': count += 3; break;
case 'p': count += 1; break;
case 'q': count += 2; break;
case 'r': count += 3; break;
case 's': count += 4; break;
case 't': count += 1; break;
case 'u': count += 2; break;
case 'v': count += 3; break;
case 'w': count += 1; break;
case 'x': count += 2; break;
case 'y': count += 3; break;
case 'z': count += 4; break;
}
}
}
cout << count;
}
再靠近一点就会爆炸
内存限制:512Mb
时间限制:1s
提交:609
解决:39
题目描述
Alice 和 Bob 是两位拆蛋专家,他们都绝顶聪明,在解决问题的时候都会选择对自己最优的方案,但是他们现在遇到了一个大麻烦。
现在地上从左到右一共有 nn 个蛋摆成一排,每个蛋在经过检验后都标上了一个专属的数值 v_{i}vi,这些蛋有一个神奇的性质,如果两个数值相同的蛋相邻的话,就会融化然后爆炸。
拆蛋专家 Alice 和 Bob 希望能够解决这个问题,他们轮流进行操作,Alice 先操作,每一次进行操作的人可以选择其中一个蛋丢掉。
但是为了满足安全限制,不发生爆炸事故,必须要满足以下要求:
- 不能丢掉两端的蛋
- 丢掉选择的蛋之后,不能存在两个数值相同的蛋相邻
如果到某一个人的回合他不能操作了,他就失败了,因为无论怎么做他都会被爆炸了。
Alice 和 Bob 想要对目前的情况做一个风险评估,他们想知道对于所有 [l, r][l,r] 的区间,有多少种区间 Alice 获胜,有多少种区间 Bob 获胜。
输入
第一行一个整数 nn,表示蛋的数量。
接下来一行 nn 个整数 v_{i}vi,表示每个蛋上的数值。
输出
输出一行两个整数 aa、bb,分别表示 Alice 获胜的区间数量和 Bob 获胜的区间数量。
样例输入1
复制
6
4 3 9 8 3 1
样例输出1
复制
7 14
提示
数据范围
对于 100 \%100% 的数据,3 \leqslant n \leqslant 10^{5}, 1 \leqslant v_{i} \leqslant 1003⩽n⩽105,1⩽vi⩽100。
样例解释
Alice 获胜的区间:[1, 3][1,3]、[1, 5][1,5]、[2, 4][2,4]、[2, 5][2,5]、[2, 6][2,6]、[3, 5][3,5]、[4, 6][4,6],其他区间 Bob 都能获胜。
逛花园
内存限制:512Mb
时间限制:1s
提交:4855
解决:2520
题目描述
小凯很喜欢逛花园,花园里布置有一些美丽的排列,好像写的是一些形如 a_1^{q_1}+a_2^{q_2}+...+a_n^{q_n}a1q1+a2q2+...+anqn 数学式子展开。
那天刮起了大风,巧妙的将所有数字的幂次都掉了下来,即式子变成了 b_1+b_2+...+b_nb1+b2+...+bn ,其中 b_i = a_i\times 10 + q_ibi=ai×10+qi 。
现在小凯想算一下原先数学式子的值,即 \sum_{i=1}^na_i^{q_i}∑i=1naiqi,你可以帮帮他吗?
哦对,花园门口好像歪七扭八写的什么 1\leq q_i \leq 91≤qi≤9 什么的,不知道对你有帮助吗?
输入
第一行,一个正整数 nn。
接下来 nn 行,每行一个整数表示 b_ibi。
输出
仅一行一个整数,\sum_{i=1}^na_i^{q_i}∑i=1naiqi 的值。
样例输入1
复制
2
22
33
样例输出1
复制
31
样例输入2
复制
5
11
22
33
44
55
样例输出2
复制
3413
样例输入3
复制
3
124512
867
2525
样例输出3
复制
35809192269129
提示
数据范围
对于 100 \%100% 的数据,1 \le n \le 101≤n≤10,10 \le b_i \le 20000010≤bi≤200000,1 \leq \sum_{i=1}^na_i^{q_i} \leq 10 ^ {18}1≤∑i=1naiqi≤1018。
样例解释
样例说明1
- 22=2\times10+222=2×10+2
- 33=3\times10+333=3×10+3
这样,原式值是2^2+3^3=3122+33=31
样例说明2
- 11=1\times10+111=1×10+1
- 22=2\times10+222=2×10+2
- 33=3\times10+333=3×10+3
- 44=4\times10+444=4×10+4
- 55=5\times10+555=5×10+5
这样,原式值是1^1+2^2+3^3+4^4+5^5=341311+22+33+44+55=3413
样例说明3
- 124512=12451\times10+2124512=12451×10+2
- 867=86\times10+7867=86×10+7
- 2525=252\times10+52525=252×10+5
这样,原式值是12451^2+86^7+252^5=35809192269129124512+867+2525=35809192269129
#include<cstdio>
#include<iostream>
#include<cstring>
#include<math.h>
using namespace std;
const int N = 11;
long long a[N];
long long b[N];
long long q[N];
long long sum[N];
int n;
int main(){
cin >> n;
for(int i =1 ; i<= n; i++){
cin >> b[i];
a[i] = b[i]/10;
q[i] = b[i]%10;
}
long long num = 0;
for(int i = 1; i <= n; i++ ){
long long temp = 1;
for(int j = 1; j <= q[i]; j++){
temp = temp * a[i];
}
sum[i] = temp;
// cout << sum[i] << endl;
}
for(int i = 1; i <= n; i++){
num += sum[i];
}
cout << num << endl;
// long long x = 35809192269129;
//
// long y = 124512;
// long c = y%10;
// long d = y/10;
// cout << c <<" "<< d << endl;
// cout << x;
}
人们总是渴望最强大的力量
内存限制:512Mb
时间限制:1s
提交:5118
解决:206
题目描述
你是一个魔法学院的学徒,在经历了四年的魔法煎熬后,终于到了毕业的日子,学院让每个毕业生自己去宝库中挑选一套装备。
宝库中陈列着 nn 件珍贵的魔法物品,学过《魔法物品魔力值测量》课程的你一眼就看出了每件物品的魔力值 v_{i}vi,你必须至少选择 AA 件物品,但最多不能超过 BB 件物品作为你的毕业礼物。
一套装备的威力等于所有物品的平均魔力值,你渴望获取强大的威力,你想知道威力值最大是多少。
当然,除了你,还有其他学徒也在宝库中寻找着自己理想的魔法物品组合,也希望获得最强大的威力。你很好奇,是否还有其他学徒的装备能够达到与他相同的威力,即最大平均魔力价值。
请你求出最大威力值,和达到最大威力值的物品选取方案数。
输入
第一行三个整数 nn、AA、BB,分别表示物品的数量,最少选取的物品数和最多选取的物品数量。
接下来一行,共 nn 个整数 v_{i}vi,表示一个魔法物品的魔力值。
输出
第一行一个浮点数,表示最大的威力值。输出应该和答案的相对误差、绝对误差相差不超过 10^{-6}10−6。
第二行一个整数,表示达到最大威力值的物品选取方案数。
样例输入1
复制
4 2 3
10 20 10 10
样例输出1
复制
15.000000
3
提示
数据范围
对于 100 \%100% 的数据,1 \leqslant n \leqslant 50, 1 \leqslant A < B \leqslant n, 1 \leqslant v_{i} \leqslant 10^{15}1⩽n⩽50,1⩽A<B⩽n,1⩽vi⩽1015。
建议选手选择精度更强的数据类型以避免精度问题。
样例解释
选取魔力值为20 10 的物品可以使得平均魔力值,即威力值达到最大。
可以通过以下的三个选取方式达到最大的魔力值:\{1, 2\}, \{2, 3\}, \{2, 4\}{1,2},{2,3},{2,4}。