阅读题,

概要:给出垃圾邮件和非垃圾邮件的集合,然后按照题目给出的贝叶斯公式计算概率一封邮件是垃圾邮件的概率。

逐个单词判断,将公式化简一下就是在垃圾邮件中出现的次数和在总次数的比值,大于二分之一就算是垃圾邮件的单词。

如果一个邮件里的垃圾邮件的单词出现次数超过给定比例就算是垃圾邮件。

需要注意的地方是:一个邮件里单词只能统计一次,用set保证不重复。

因为sstream会很慢,容易T,所以手写了一个类似的sstream的函数

#include<bits/stdc++.h>
using namespace std; typedef long double ld;
map<string,int> spam,good;
set<string> once;
int s,g,n,T;
const int maxn = ;
char str[maxn],word[maxn]; int sscan_l(char *w,char *&s)
{
while(isalpha(*s) == ){
if(!*s) return ;
s++;
}
int j = ;
for(int t; s[j] && (t = isalpha(s[j])) !=; j++){
w[j] = s[j];
if(t == ) w[j] += 'a'-'A';
}
w[j] = '\0'; s += j;
return j;
} bool judge()
{
gets(str); char *p = str;
int cnt = ;
once.clear();
while(sscan_l(word,p)){
string s0 = word;
if(once.count(s0) == ){
once.insert(s0);
int wS = spam[s0];
int wTot = wS + good[s0];
if(wTot && wS* >= wTot) cnt++;
}
} return cnt*>=T*once.size();
} int main()
{
freopen("spam.in","r",stdin);
freopen("spam.out","w",stdout);
scanf("%d%d%d%d\n",&s,&g,&n,&T);
for(int i = ; i < s; i++){
gets(str); char *p = str;
once.clear();
while(sscan_l(word,p)){
string s0 = word;
if(once.count(s0) == ){
once.insert(s0);
spam[s0]++;
}
}
}
for(int i = ; i < g; i++){
gets(str); char *p = str;
once.clear();
while(sscan_l(word,p)){
string s0 = word;
if(once.count(s0) == ){
once.insert(s0);
good[s0]++;
}
}
}
for(int i = ; i < n; i++){
if(judge()) puts("spam");
else puts("good");
}
return ;
}

最新文章

  1. Codeforces Round #381(div 2)
  2. web项目开发规范整理总结
  3. 【C#进阶系列】17 委托
  4. 状态压缩 CSU1129 送货到家
  5. Odoo Website 替换 谷歌地图为 百度地图
  6. DOM(二)使用DOM
  7. Java进程间通信
  8. Javascript 严格模式详解(转)
  9. A题笔记(9)
  10. java的Comparator和Comparable
  11. oracle 查询前一小时、一天、一个月、一年的数据
  12. 关系型数据库遵循ACID规则
  13. golang 之 defer(统计函数执行时间)
  14. Reorder List [leetcode] 这两种思路
  15. geyear和getfullyear的区别
  16. 一大波 Android 刘海屏来袭,全网最全适配技巧!
  17. Dynamics CRM2013 Server2012下部署ADFS和IFD遇到的问题No Organization were retrived
  18. Java 视频处理,截帧操作
  19. IIS小知识
  20. UICollectionView在初始化的时候移动到某个距离

热门文章

  1. codevs-1204
  2. Git(二)--常用命令
  3. 利用StringBuffer来替换内容
  4. HDU5918【KMP大法好,虽然我不会】
  5. 强大的在线web编辑器UEditor
  6. DataGridView Index -1 does not have a value 错误
  7. [Xcode 实际操作]二、视图与手势-(1)UIView视图的基本使用
  8. 多线程 GCD队列组
  9. C语言带参宏定义和函数的区别
  10. 学习java设计模式的必要性探讨