阅读题,

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

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

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

需要注意的地方是:一个邮件里单词只能统计一次,用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 ;
}

codeforces Gym 100338F Spam Filter 垃圾邮件过滤器(模拟,实现)的更多相关文章

  1. Codeforces Gym 100338B Spam Filter 字符串哈希+贝叶斯公式

    原题链接:http://codeforces.com/gym/100338/attachments/download/2136/20062007-winter-petrozavodsk-camp-an ...

  2. Codeforces Gym 100851 K King's Inspection ( 哈密顿回路 && 模拟 )

    题目链接 题意 : 给出 N 个点(最多 1e6 )和 M 条边 (最多 N + 20 条 )要你输出一条从 1 开始回到 1 的哈密顿回路路径,不存在则输出 " There is no r ...

  3. WEKA使用(基础配置+垃圾邮件过滤+聚类分析+关联挖掘)

    声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Windows系统下的WEKA,实验内容主要有三部分,第一是分类挖掘(垃圾邮件过滤),第二是聚类分析, ...

  4. python 和 scikit-learn 实现垃圾邮件过滤

    文本挖掘(Text Mining,从文字中获取信息)是一个比较宽泛的概念,这一技术在如今每天都有海量文本数据生成的时代越来越受到关注.目前,在机器学习模型的帮助下,包括情绪分析,文件分类,话题分类,文 ...

  5. Linux中Postfix反病毒和垃圾邮件工具(十)

    amavisd-new amavisd-new呼叫器是一个连接MTA和内容检测工具(诸如病毒扫描工具和SpamAssassin)的高性能接口程序,使用perl语言写成.它一般通过SMTP.ESMTP或 ...

  6. Linux中Postfix反病毒和垃圾邮件(十)

    amavisd-new amavisd-new呼叫器是一个连接MTA和内容检测工具(诸如病毒扫描工具和SpamAssassin)的高性能接口程序,使用perl语言写成.它一般通过SMTP.ESMTP或 ...

  7. contact form 7如何搭配Akismet过滤垃圾邮件

    contact form 7有很多站长在用,但是经常会有一些垃圾邮件进来,如何过滤呢?两个方法:1.表单提交启用验证码功能,很多垃圾邮件是用软件扫相应的端口,然后批量群发,如果用验证码了可以过滤很大一 ...

  8. 使用BloomFilter布隆过滤器解决缓存击穿、垃圾邮件识别、集合判重

    Bloom Filter是一个占用空间很小.效率很高的随机数据结构,它由一个bit数组和一组Hash算法构成.可用于判断一个元素是否在一个集合中,查询效率很高(1-N,最优能逼近于1). 在很多场景下 ...

  9. 【DM】Combating Web Spam with TrustRank - 用TrustRank对抗网络垃圾邮件

    [论文标题]Combating Web Spam with TrustRank (Proceedings 2004 VLDB Conference) [论文作者]Zolt´an Gy¨ongyi,He ...

随机推荐

  1. 1.7 hive基本操作

    一.基本命令和设置 1.命令 [root@hadoop-senior hive-0.13.1]# bin/hive Logging initialized using configuration in ...

  2. 洛谷 - P2051 - 中国象棋 - 简单dp

    https://www.luogu.org/problemnew/show/P2051 一点都不简单的简单dp. 还是从旧行转移到新行,而不是考虑新行从哪些旧行转移吧. #include<bit ...

  3. iOS 使用cocoapods导入ReactiveCocoa和ReactiveObjC框架

    cocoapods使用 ReactiveObjC -- 对应的是RAC的OC版本,最新3.1.0版本. ReactiveCocoa--对应的是RAC的swift版本,最新7.1.0版本. 1.纯OC项 ...

  4. 无法序列化会话状态。请注意,当会话状态模式为“StateServer”或“SQLServer”时,不允许使用无法序列化的对象或 MarshalByRef 对象。

    原文链接:http://blog.csdn.net/byondocean/article/details/7564502 session是工作在你的应用程序进程中的.asp.net进程.iis往往会在 ...

  5. Lightoj1083【单调栈】

    #include <cstdio> #include <stack> #include <iostream> #include <string.h> # ...

  6. Ubuntu终端查看系统时间,以及日历

    时间:  date 日历: cal https://blog.csdn.net/zhengchaooo/article/details/79500032 修改时区以及时间 查看时区 date -R 修 ...

  7. 开源Html5+Websocket+Mqtt实时聊天室

    本应用示例使用Coolpy7作为Mqtt服务器并启用Websocket代理完美支持高并发大流量即时通过能力,本示以即时通信聊天为为例.还可以应用到其他软件应用如:网页客服系统.网站信息通知.网页即时通 ...

  8. 最短路之Floyd(多源)HDU 1874

    #include <iostream> #include <cstdio> #include <cstring> using namespace std; #def ...

  9. 开车旅行 【NOIP2012 D1T3】

    开车旅行 [NOIP2012 D1T3] 倍增 首先令\(a[i]\)表示从i出发最近的城市下标,\(b[i]\)表示从i出发第二近的城市下标 可以维护一个\(\text{set<pair< ...

  10. 接口测试02 - 无法绕过的json解析

    概述: 先瞧一下什么是json.JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式. 它基于ECMAScript(w3c定制的js规范)的一个子集 ...