博客地址:http://www.javashuo.com/article/p-hzgqbpox-gp.htmlhtml
大学期间,你老是点子不少,你利用申请的专利,开了一家互联网公司,为客户提供高效、快捷的服务。有一天,订单量忽然大涨,欣喜之余,秘书却告诉你,今天的营业额跌到谷底,客服电话被打爆。你发现,看似不少的订单请求,其实只是给你发了一个“hello”而已,服务器忙于应付大量的hello, 已经没办法给原有用户提供正常的服务了,基本处于瘫痪的状态。通过讨论,多是受到了黑客的DDos(分布式拒绝服务)攻击。黑客经过发送大量的无用的请求信息,占用你的服务器资源,让服务器无法给用户提供正常的服务。c++
当务之急,是先恢复服务器,把攻击你的黑客都拉进黑名单,让服务器不要理会这些请求。第一步,就是要把黑客检测出来。你须要对请求进行审查,找出其中有问题的请求,而后把发送方拉黑。这些请求长这个样子:发送方的名字由4个小写英文字母组成,后面跟着接收方和请求信息的大小,你能够经过请求信息的大小推测请求的内容。git
你的服务器就是那个可怜的Bob,而发送方有不少,有的是普通用户,而有的就是黑客了。很明显,黑客在短期给你发了大量的信息,发送方中的 abcd 就颇有多是黑客,由于他在短期内给你发了不少信息量很小的请求(64,极可能只有hello),并且这些请求值总值已经超过了1500。本着宁错杀一千,不放过一个的原则,只要总的请求信息的大小超过T=1500,就把它拉黑。github
编程语言不限编程
学习基本的文件读写
读提供的文件Request.txt
把里面的内容写到output.txt安全
根据提供请求的输入Request.txt,把全部请求和对应的信息大小都存下来。
统计每一个发送方的总请求大小S,S超过T的就认定为黑客,把他们的名字存进你的黑名单里。
输出黑客的个数,和这些黑客的名字。
例如:示例中有28个请求,其中abcd发了25个请求,这些请求的总和S是1600>1500=T,因此abcd被认为是黑客,就把abcd加到你的黑名单里去。服务器
如今你已经暂时恢复了服务。但你发现,1的方法很笨,例如:把全部请求都存下来,再统计总值,花费了你大量的存储空间。这里面包含了不少没必要要的操做,有不少缺点。
吐槽1方法,找到这个方法的问题。给出你的方法,不必定是完美的,说出方法的优缺点,只要能自圆其说。(能够从速度、占用的空间、准确率等方面思考)
选作:实现你的方法。网络
输入:
名字和信息大小用一个空格隔开,每条信息用一个换行隔开编程语言
lhyy bob 100 hzrr bob 700 cyxx bob 364 lhyy bob 700 lhyy bob 800 zzyy bob 300 zzyy bob 800 zzyy bob 600
输出:
第一行输出黑客的总个数,第二行输出黑客名,每一个黑客名用一个换行隔开分布式
2 lhyy zzyy
#include<bits/stdc++.h> using namespace std; const int T=1500; int main(){ freopen("Request.txt","r",stdin); freopen("output.txt","w",stdout); map<string, int> request_sum; string request_name,server_name; int request_num,blacklist_size=0; while (cin>>request_name>>server_name>>request_num) { if (request_sum[request_name]<=T) { request_sum[request_name]+=request_num; if (request_sum[request_name]>T) { blacklist_size++; } } } map<string, int>::iterator it; printf("%d\n",blacklist_size); for (it=request_sum.begin(); it!=request_sum.end(); it++) { if ((it->second)>T) { cout<<it->first<<'\n'; } } fclose(stdin); fclose(stdout); return 0; }
GitHub:https://github.com/Echohat/031802319/tree/master/second