描述
小Hi和他的小伙伴们一起写了很多代码。时间一久有些代码究竟是不是自己写的,小Hi也分辨不出来了。
于是他实现了一个分类算法,希望用机器学习实现自动分类。
为了评价这个分类算法的优劣,他选出了N份有标记的代码作测试集,并决定用F1 Score作为评价标准。
给出N份代码的实际作者是不是小Hi以及分类算法预测的结果,请你计算F1 Score。
输入
第一行包含一个整数N。(1 <= N <= 1000)
以下N行每行包含两个字符(+或-)。第一个字符代表这份代码的实际作者是不是小Hi(+代表是,-代表不是),第二个代表预测的作者是不是小Hi(+代表是,-代表不是)。
输出
一个百分数,X%,代表答案,X保留两位小数。
样例输入
4 + + + - - + - -
样例输出
50.00%
用F1-Score来作为评价标准,而F1-Score的定义可见http://www.cnblogs.com/weedboy/p/7072010.html
比较坑的是要注意分母为零的时候,precision和recall都为1,F1-Score的分母为0的时候,分母当成1来计算
ac代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<vector> #include<iomanip> using namespace std; int main() { int n; double tp=0,fp=0,tn=0,fn=0; char ans, pre; cin >> n; for (int i = 0;i < n;i++) { cin >> ans >> pre; if (ans == '+'&&pre == '+') tp++; else if (ans == '+'&&pre == '-') fn++; else if (ans == '-'&&pre == '-') tn++; else if (ans == '-'&&pre == '+') fp++; } double p = (tp + fp)==0?1:tp / (tp + fp); double r = (tp + fn)==0?1:tp / (tp + fn); double res = (p + r)==0? 2*p*r :2*p*r /(p + r); printf("%.2lf%s ", res*100,"%"); return 0; }