soj2166D 反垃圾邮件

2024-06-12 17:48
文章标签 垃圾邮件 soj2166d

本文主要是介绍soj2166D 反垃圾邮件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

又做了一道吴大大出的题,恩,感觉这题质量可以,测试用例也不错。粗心导致了多次wa。。。做模拟题还是功力不够啊。。。

先贴题目:

Problem D:反垃圾邮件 
随着互联网的高速发展,网络通信变得十分便利,电子邮件便是渠道之一,而由此带来
的问题是,我们总会收到大量来自互联网的垃圾邮件,这是让人烦扰的一件事。 
限制短时间内发送大量电子邮件,是一种有效的避免垃圾邮件泛滥的措施。这里我们只
考虑其中一个最简单的模型(实际生活中,不会被简单地采用):对于电子邮件的发送方而言,
其任意已经发送的两封不同的邮件,若其发送时间间隔在 T内,则不存在超过 x封自发邮件
(表示自己写邮件内容)或y封转发邮件(表示转发别人的邮件)。 
为方便理解,假定有N封邮件需要按时间先后顺序发送, 假设现在需要发送第M (1≤M≤N)
封邮件,虽然此前有 M-1封邮件已经尝试去发送,但可能只有一部分发送成功。记此前已发
送成功的邮件有 S 封,那么第 M 封邮件是否能够发送成功,取决于它与这 S 封邮件是否满
足反垃圾邮件限制。如果 S=0,那么第 M封邮件一定可以发送;否则,这 S封邮件里面的第
k (1≤k≤S)封发送成功的邮件与第M封邮件若满足A条件, 则遵循 B规则, 若不满足 A条件,
则第M封邮件会发送成功。 
A.  两者待发送的时间间隔在时间T 内。 
B.  如果第 M 封邮件发送成功,那么在第 k  (1≤k≤S)封邮件和第 M 封邮件之间,如果存
在超过 x 封自发邮件或 y 封转发邮件成功发送(第 k 封和第 M 封邮件的类型也要计
算在内),那么实际情况是第 M封邮件会发送失败,否则,这封邮件会发送成功。 
输入说明 
多组测试数据,每组测试数据第一行包含4个整数N, T, x, y (0≤N, T, x, y≤105),分别表示待发
的邮件总数量,时间限制间隔,自发邮件限制数量以及转发邮件限制数量。接下来的 N行,
每行包含2 个整数pk (0≤pk≤105)和qk (qk = 1, -1),分别表示邮件发送的时间和邮件的分类,如
果qk=1,表示邮件是自发邮件,否则,一定有 qk=-1且表示邮件是转发邮件。输入数据保证
各邮件发送的时间互不相同,pk越小表示邮件发送的优先级越高。 
输出说明 
对于每组测试数据,输出发送成功的邮件数量,每组测试数据占用1行。 
样例输入 
2 10 0 0 
1 1 
11 -1 
2 10 1 1 
1 1 
12 -1 
样例输出 

2   


唉必须说我做题时心态不行,当时太慌张,一看以为这题要用线段树做,虽然我基本不会线段树。。一算时间复杂度怎么都在n*n,就放弃了这道题,实际上这题只是简单的模拟。。。

方法就是,先按时间对邮件排序,再依次遍历,用两个数组保存两种邮件的数量。对于当前考察的邮件,只需要在已发送成功的邮件中二分查找刚好满足时间限制的邮件,再比较是否满足数量限制,而且只需比较这一个,因为如果找到的与当前邮件冲突,就可以直接判断当前油价不能发送,如果不冲突,那后面的也不会冲突,就这样,复杂度为n*lgn,其实看输入数据量就能大致判断需要多少复杂度的算法,这里10000,必然复杂度要小于n*lgn。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int MAX=100000+10;
int n,t,x,y,all,aa[MAX],bb[MAX];struct mail
{int time,type,index;bool operator<(mail other)const{return time<other.time;}void operator=(mail other){time=other.time,type=other.type;}
}s[MAX],ss[MAX];int bsearch(int t)
{if(all==0||ss[all-1].time<t)return -1;if(ss[0].time>=t)return 0;int front=0,rear=all-1,mid,i,j;while(front+1<rear){mid=(front+rear)/2;if(ss[mid].time<t)front=mid;elserear=mid;}return rear;
}int main()
{int i,j,typea,typeb,sea;while(scanf("%d %d %d %d",&n,&t,&x,&y)!=EOF){for(i=0;i<n;i++){scanf("%d %d",&s[i].time,&s[i].type);}sort(s,s+n);memset(aa,0,MAX*4);memset(bb,0,MAX*4);all=0;for(i=0;i<n;i++){sea=bsearch(s[i].time-t);//大于等于time-t的最小时间if(sea==-1){ss[all].index=i;ss[all++]=s[i];if(s[i].type==1){aa[i]=(i==0?1:aa[i-1]+1);bb[i]=(i==0?0:bb[i-1]);}else{aa[i]=(i==0?0:aa[i-1]);bb[i]=(i==0?1:bb[i-1]+1);}}else{typea=((s[i].type==1)?1:0);typea=((ss[sea].type==1)?(typea+1):typea);//ss写成了stypeb=((s[i].type==-1)?1:0);typeb=((ss[sea].type==-1)?(typeb+1):typeb);if(typea+aa[i-1]-aa[ss[sea].index]>x||typeb+bb[i-1]-bb[ss[sea].index]>y)//ss写成了s{aa[i]=aa[i-1],bb[i]=bb[i-1];//等号写成了==}else{ss[all].index=i;ss[all++]=s[i];if(s[i].type==1){aa[i]=aa[i-1]+1;bb[i]=bb[i-1];}else{aa[i]=aa[i-1];bb[i]=bb[i-1]+1;}}}}printf("%d\n",all);}return 0;
}


这篇关于soj2166D 反垃圾邮件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054909

相关文章

U-Mail垃圾邮件过滤网关‍是如何过滤垃圾邮件的?

随着互联网的普及,垃圾邮件已经成为计算机网络安全的又一个公害。因此,反垃圾邮件已经成为互联网应用研究中一个重要课题。为了防止垃圾邮件首先要学会保护自己的邮件地址,避免在网上随意登记和使用邮件地址,预防垃圾邮件骚扰。其次使用专业的垃圾邮件过滤网关。比如U-Mail垃圾邮件过滤网关以其卓越的性能和精准的过滤机制成为了许多企业邮件系统的“守护神”。下面U-Mail张工就给大家深入解析U-Mail垃圾邮件

【EmailCamel外贸邮件群发】让邮件不进入垃圾邮件箱的实用方法-建立独立发信域!

很多人不知道邮件为什么会进垃圾箱?之前写过一篇文章“邮件到达收件箱系列文章16:企业邮箱发邮件进垃圾箱怎么办?” 。里面提到了5个建议。今天我们再介绍从硬件方面,如何减少进垃圾箱! 做外贸避免不了需要群发开发信(日发上万封),而这样的量用企业邮箱是无法发出去的,而且也建议不要用企业邮箱群发开发信(容易把企业邮箱发坏,无法正常收发邮件)!看看这篇“邮件到达收件箱系列文章14:用企业邮箱群发开发信,企

【Spark Mllib】逻辑回归——垃圾邮件分类器与maven构建独立项目

http://blog.csdn.net/u011239443/article/details/51655469使用SGD算法逻辑回归的垃圾邮件分类器 1 package com.oreilly.learningsparkexamples.scala 2 3 import org.apache.spark.{SparkConf, SparkContext} 4 import org.a

Outlook关闭垃圾邮件过滤的方法

Outlook关闭垃圾邮件过滤的方法 | LogDicthttps://www.logdict.com/archives/outlookguan-bi-la-ji-you-jian-guo-lu-de-fang-fa

防垃圾邮件网关/防钓鱼邮件解决方案

方案一:使用Exchange系统自带反垃圾邮件功能 方案二:使用微软EOP云端反垃圾邮件功能,可以与本地Exchange混合部署,云端做为统一入口 方案三:使用专业防垃圾邮件网关设备,其中有些产品也支持云端SAAS平台,部署使用起来更加高效方便,一次投入成本更低。 方案概览:

U-Mail邮件系统反垃圾解决方案,彻底解决垃圾邮件

随着互联网的普及和电子邮件的广泛应用,垃圾邮件已成为一种严重的网络污染。首先,垃圾邮件占用了大量的网络带宽,导致正常邮件的传输受阻,严重影响了用户的使用体验。其次,垃圾邮件中的恶意链接和欺诈信息可能导致用户上当受骗,带来经济损失。此外,垃圾邮件还可能携带病毒和恶意程序,对用户的计算机系统和信息安全构成威胁。因此,采取有效的反垃圾邮件措施,是当前企业必须面对的重要任务。 为了帮助企业解决垃

邮箱总是被垃圾邮件轰炸?来试试这个临时邮箱生成器吧!

这是「进击的Coder」的第 453 篇技术分享 作者:崔庆才 有时候我们可能为了测试各种各样的功能,需要用邮箱注册一些网站,然后过段时间就发现这个网站开始往我们的邮箱发送一些垃圾广告信息,比如如图所示: 很多邮箱服务有自动垃圾邮件分类的功能,但免不了的还是有些不好区分,来了不感兴趣的邮件我们还是要手动设置下规则,有时候关还关不掉。 如果我们只是为了简单测试某些功能,同时又不想发生上面的事情,

论垃圾邮件危害性及U-Mail邮件系统必杀技

阿里集团今年“双十一电商节”又一次突破了去年营收,创造了新的历史。相信在电商日益渗入生活的今天,你在日常工作中一定收到过某店铺发来的推广邮件,的确,邮件如今被电商广泛应用于消费者购物各环节,但是在其应用越来越频繁的同时,也伴随着垃圾邮件日益增多的烦恼。一些企业老板对垃圾邮件的危害性认识不够,以为只要删除了事,殊不知垃圾邮件带来的危害可是全面性的,下面且听U-Mail小编细说端详。 垃圾邮件危害性

sendmail中与垃圾邮件相关的功能

sendmail中与垃圾邮件相关的功能 垃圾邮件是对广告宣传邮件的专门叫法,通常也称之为不请自来的商业电子邮件。它已经成为一个严重的问题,这主要是因为发件人(至少在美国)不是按字 节数付钱,而是纯粹按连接速率付钱的。或者就算他们按字节数付钱,他们也会只发送一则有数千个收件人的消息,然后通过另一台机器来转发它。别的机器支付了按字节算的庞大费用,而发送垃圾邮件者只支付一份拷贝的钱。在许多国家,最

SpamSieve mac垃圾邮件过滤器 直装激活版

SpamSieve通过强大的垃圾邮件过滤技术,帮助用户有效管理和消除不想要的电子邮件。它能与多种电子邮件客户端无缝集成,如Apple Mail、Microsoft Outlook、Airmail等。 软件下载:SpamSieve mac直装激活版下载 该软件利用先进的算法和机器学习技术分析传入的电子邮件,并判断其是否为垃圾邮件或合法邮件。它通过分析被标记为垃圾邮件或非垃圾邮件的邮件来