Brief Description:
给定2个计算公式,然后按公式算出答案。
Analysis:
水题,关键是看清题目和字符串的处理(如何将带有空格的字符串按空格划分,这里用了stringstream),判重用map比较好写,具体见代码。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <string>
#include <map>
#include <sstream>
using namespace std;
char s[105][10010],ss[105][10010],c[55];
int t1,t2,n;
int main()
{
int cas,ta=1;
scanf("%d",&cas);
while(cas--){
int i,j;
scanf("%d",&n);
getchar();
for(i=0; i<n; i++) gets(s[i]);
for(i=0; i<n; i++) gets(ss[i]);
double ans=0,par,numr;
for(i=0; i<n; i++){
map<string,int>M;
numr = par = 0;
t1 = t2 = 0;
stringstream sin(s[i]); // good use..!
sin >> c;
while(sin >> c){
M[c] = 1; // char* is OK
t1++;
}
if(t1 == 0) continue;
stringstream Sin(ss[i]);
Sin >> c;
j = 0;
while(Sin >> c){
t2++;
if(M.find(c) != M.end()){
j++;
par += (double)j / t2;
}
}
ans += par / t1;
}
printf("Case #%d: %.6lf\n",ta++,ans/n);
}
return 0;
}