codeforces Gym 100338F Spam Filter 垃圾邮件过滤器(模拟,实现)
阅读题,
概要:给出垃圾邮件和非垃圾邮件的集合,然后按照题目给出的贝叶斯公式计算概率一封邮件是垃圾邮件的概率。
逐个单词判断,将公式化简一下就是在垃圾邮件中出现的次数和在总次数的比值,大于二分之一就算是垃圾邮件的单词。
如果一个邮件里的垃圾邮件的单词出现次数超过给定比例就算是垃圾邮件。
需要注意的地方是:一个邮件里单词只能统计一次,用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 垃圾邮件过滤器(模拟,实现)的更多相关文章
- Codeforces Gym 100338B Spam Filter 字符串哈希+贝叶斯公式
原题链接:http://codeforces.com/gym/100338/attachments/download/2136/20062007-winter-petrozavodsk-camp-an ...
- Codeforces Gym 100851 K King's Inspection ( 哈密顿回路 && 模拟 )
题目链接 题意 : 给出 N 个点(最多 1e6 )和 M 条边 (最多 N + 20 条 )要你输出一条从 1 开始回到 1 的哈密顿回路路径,不存在则输出 " There is no r ...
- WEKA使用(基础配置+垃圾邮件过滤+聚类分析+关联挖掘)
声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Windows系统下的WEKA,实验内容主要有三部分,第一是分类挖掘(垃圾邮件过滤),第二是聚类分析, ...
- python 和 scikit-learn 实现垃圾邮件过滤
文本挖掘(Text Mining,从文字中获取信息)是一个比较宽泛的概念,这一技术在如今每天都有海量文本数据生成的时代越来越受到关注.目前,在机器学习模型的帮助下,包括情绪分析,文件分类,话题分类,文 ...
- Linux中Postfix反病毒和垃圾邮件工具(十)
amavisd-new amavisd-new呼叫器是一个连接MTA和内容检测工具(诸如病毒扫描工具和SpamAssassin)的高性能接口程序,使用perl语言写成.它一般通过SMTP.ESMTP或 ...
- Linux中Postfix反病毒和垃圾邮件(十)
amavisd-new amavisd-new呼叫器是一个连接MTA和内容检测工具(诸如病毒扫描工具和SpamAssassin)的高性能接口程序,使用perl语言写成.它一般通过SMTP.ESMTP或 ...
- contact form 7如何搭配Akismet过滤垃圾邮件
contact form 7有很多站长在用,但是经常会有一些垃圾邮件进来,如何过滤呢?两个方法:1.表单提交启用验证码功能,很多垃圾邮件是用软件扫相应的端口,然后批量群发,如果用验证码了可以过滤很大一 ...
- 使用BloomFilter布隆过滤器解决缓存击穿、垃圾邮件识别、集合判重
Bloom Filter是一个占用空间很小.效率很高的随机数据结构,它由一个bit数组和一组Hash算法构成.可用于判断一个元素是否在一个集合中,查询效率很高(1-N,最优能逼近于1). 在很多场景下 ...
- 【DM】Combating Web Spam with TrustRank - 用TrustRank对抗网络垃圾邮件
[论文标题]Combating Web Spam with TrustRank (Proceedings 2004 VLDB Conference) [论文作者]Zolt´an Gy¨ongyi,He ...
随机推荐
- ThinkPHP3.2.3中,配置文件里配置项的读取
在ThinkPHP3.2.3的版本中,配置项的读取,有两种情况. 是在PHP文件或者在PHP代码中的读取方法为C函数,例如:C('配置项的名称'); 在HTML模板中的读取方法为,例如{$Think. ...
- vijosP1286座位安排(状压DP)
传送门 题意 计算\(C_{n*m}^k/可行方案数\) 分析 定义dp[i][j][k]为第i行用过人数为j个且第i行状态为k的方案数 转移方程:dp[i][j][k]=Σdp[i-1][j-num ...
- c#二维数组传递与拷贝
定义 string[,] arr = new string[12, 31] 另一种string[][] ary = new string[5][];相当于一维数组 常量二维数组定义, 用readonl ...
- spring框架——依赖注入
依赖注入:DI 又称控制反转:IoC 项目名字spring_DI 一.implement包中定义了两个接口Food和Person 1.接口Food package org.interfaces; pu ...
- hibernate下载
- 213. 打家劫舍 II
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在 ...
- OSPF-1-OSPF的数据库交换(1)
一.OSPF路由器ID(RID) 选举过程: 1.使用router-id id 命令中配置的路由器ID 2.up着的环回接口最大的ip 3.up着的非环回接口最大ip 如果路由器的RID发生了变化 ...
- (动态规划)UVA-11400:Lighting System Design
You are given the task to design a lighting system for a huge conference hall. After doing a lot of ...
- 洛谷 P4092 [HEOI2016/TJOI2016]树 || bzoj4551
https://www.lydsy.com/JudgeOnline/problem.php?id=4551 https://www.luogu.org/problemnew/show/P4092 这当 ...
- 由Reference展开的学习
在阅读Thinking in Java的Containers in depth一章中的Holding references时,提到了一个工具包java.lang.ref,说这是个为Java垃圾回收提供 ...