ZOJ3827——Information Entropy
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3827
/*
输出用f
*/
/************************************************ * Author :Powatr * Created Time :2015-8-18 10:37:09 * File Name :ZOJ2827.cpp ************************************************/ #include <cstdio> #include <algorithm> #include <iostream> #include <sstream> #include <cstring> #include <cmath> #include <string> #include <vector> #include <queue> #include <deque> #include <stack> #include <list> #include <map> #include <set> #include <bitset> #include <cstdlib> #include <ctime> using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1, r, rt << 1 | 1 typedef long long ll; const int MAXN = 100 + 10; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 7; int main(){ int n; char s[10]; int a[MAXN]; int T; scanf("%d", &T); while(T--){ double ans = 0.0; scanf("%d%s", &n, s); for(int i = 1; i <= n; i++) scanf("%d", &a[i]); for(int i = 1; i <= n; i++){ if(a[i] == 0) continue; double res = (double)(1.0*a[i]*(1.0*log(1.0*a[i]/100))/100); if(s[0] == 'b') res = (double)res/(1.0*log(2.0)); if(s[0] == 'd') res = (double)res/(1.0*log(10.0)); ans += res; } printf("%.10f\n", -1.0*ans); } return 0; }