一个小题解
这题怎么没题解啊?(这道题简简单单,只要看的懂题,懂点数学就能做啊)那就水一篇题解吧 qwq。
题目分析
这道题题目说的就很简略(虽然还有一堆没用的背景),就是求
那么看懂题目后我们再进行推导。如果选了
那么每个人占总人数的百分比与每个人的金钱占总金钱的百分比的分别的和就是真实的百分比
注意:百分比 A 和 B 都只输出百分数数字部分,所以说要乘一百再输出
代码呈上
#include <bits/stdc++.h>
using namespace std;
int n;
double per[300005],sum,pd,a,b;
int comp(double a,double b){
return a > b;
}
int main(){
scanf("%d",&n);//输入
pd=1.0/n;//提前算出n分之一的值,便于枚举B的值
for(int i = 1; i <= n; ++i)
scanf("%lf",&per[i]), sum+=per[i];//输入并计算n个人p值总和
for(int i = 1; i <= n; ++i)
per[i]=per[i]/sum;//提前除上所有人p值总和,便于计算A的值
sort(per+1, per+1+n, comp);//从大到小排序,方便枚举
for(int i = 1; i <= n; ++i)
if(per[i] >= pd)//如果添加的这个人的pi/np比1/n多,那么添加这个人后A-B的值又会多上一些
a+=per[i], b+=pd;
printf("%.14lf\n%.14lf",b*100/*转为百分数*/,a*100/*转为百分数*/);//输出答案
return 0;
}
这样就做完啦 LOuO。