/*
zoj 3827
题目大意就是
根据题目给定的公式,然后算值就行
题目很简单,可能看到给的式子有点吓人就是了
只要注意
三个字符串代表不同的底数
题目中所给的p是概率,把输入进来的数除以100
以及以2为底的对数可以写成以10(或者e)为底然后除以以10(或者e)2的对数就行
*/
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<stdio.h>
#include<math.h>
#define ll long long
#define PI acos(-1)
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
string b;
cin>>n>>b;
double h=0;
if(b=="bit")
{
double p;
for(int i=1; i<=n; i++)
{
cin>>p;
if(p==0)
h=h+0;
else
h=h+(p/100.0)*(log(p/100.0)/log(2.0));
}
h=-h;
}
else if(b=="nat")
{
double p;
for(int i=1; i<=n; i++)
{
cin>>p;
if(p==0)
h=h+0;
else
h=h+(p/100.0)*(log(p/100.0));
}
h=-h;
}
else
{
double p;
for(int i=1; i<=n; i++)
{
cin>>p;
if(p==0)
h=h+0;
else
h=h+(p/100.0)*(log10(p/100.0));
}
h=-h;
}
printf("%.12lf\n",h);
}
return 0;
}
zoj 3827
题目大意就是
根据题目给定的公式,然后算值就行
题目很简单,可能看到给的式子有点吓人就是了
只要注意
三个字符串代表不同的底数
题目中所给的p是概率,把输入进来的数除以100
以及以2为底的对数可以写成以10(或者e)为底然后除以以10(或者e)2的对数就行
*/
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<stdio.h>
#include<math.h>
#define ll long long
#define PI acos(-1)
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
string b;
cin>>n>>b;
double h=0;
if(b=="bit")
{
double p;
for(int i=1; i<=n; i++)
{
cin>>p;
if(p==0)
h=h+0;
else
h=h+(p/100.0)*(log(p/100.0)/log(2.0));
}
h=-h;
}
else if(b=="nat")
{
double p;
for(int i=1; i<=n; i++)
{
cin>>p;
if(p==0)
h=h+0;
else
h=h+(p/100.0)*(log(p/100.0));
}
h=-h;
}
else
{
double p;
for(int i=1; i<=n; i++)
{
cin>>p;
if(p==0)
h=h+0;
else
h=h+(p/100.0)*(log10(p/100.0));
}
h=-h;
}
printf("%.12lf\n",h);
}
return 0;
}