The Letter Carrier's Rounds(摘)
Description
HELOmynameIdentifies the sender to the receiver (yes, there is only one L). MAIL FROM:<sender>Identifies the message sender RCPT TO:<user>Identifies one recipient of the message DATAFollowed by an arbitrary number of lines of text comprising the message body, ending with a line containing a period in column one. QUITTerminates the communication.
The following response codes are sent by the receiving MTA:
221 Closing connection (after QUIT) 250 Action was okay (after MAIL FROM and RCPT TO specifying an acceptable user, or completion of a message) 354 Start sending mail (after DATA) 550 Action not taken; no such user here (after RCPT TO with unknown user)
Input
Output
Sample Input
MTA London 4 Fiona Paul Heather Nevil
MTA SanFrancisco 3 Mario Luigi Shariff
MTA Paris 3 Jacque Suzanne Maurice
MTA HongKong 3 Chen Jeng Hee
MTA MexicoCity 4 Conrado Estella Eva Raul
MTA Cairo 3 Hamdy Tarik Misa
*
Hamdy@Cairo Conrado@MexicoCity Shariff@SanFrancisco Lisa@MexicoCity
*
Congratulations on your efforts !!
--Hamdy
*
Fiona@London Chen@HongKong Natasha@Paris
*
Thanks for the report! --Fiona
*
*
Sample Output
Connection between Cairo and MexicoCity
HELO Cairo
250
MAIL FROM:<Hamdy@Cairo>
250
RCPT TO:<Conrado@MexicoCity>
250
RCPT TO:<Lisa@MexicoCity>
550
DATA
354
Congratulations on your efforts !!
--Hamdy
.
250
QUIT
221
Connection between Cairo and SanFrancisco
HELO Cairo
250
MAIL FROM:<Hamdy@Cairo>
250
RCPT TO:<Shariff@SanFrancisco>
250
DATA
354
Congratulations on your efforts !!
--Hamdy
.
250
QUIT
221
Connection between London and HongKong
HELO London
250
MAIL FROM:<Fiona@London>
250
RCPT TO:<Chen@HongKong>
250
DATA
354
Thanks for the report! --Fiona
.
250
QUIT
221
Connection between London and Paris
HELO London
250
MAIL FROM:<Fiona@London>
250
RCPT TO:<Natasha@Paris>
550
QUIT
221
就是数据太复杂,对于stl中容器的应用很生疏,没啥思维难点
以下程序的亮点:
用一个string字符串data存储两三行的邮件
#include<iostream>
#include<map>
#include<string>
#include<vector>
#include<set>
using namespace std; void parse_address(const string&s,string& user,string&mta)
{
int k=s.find('@');
user=s.substr(,k); //将user1@mta1 分解开来
mta=s.substr(k+);
}
int main()
{
int n;
string s,t,user1,mta1,user2,mta2;
set<string>address; while(cin>>s&&s!="*"){ //mta下的用户信息
cin>>s>>n;
while(n--){
cin>>t;
address.insert(t+'@'+s);
}
}
while(cin>>s&&s!="*"){
parse_address(s,user1,mta1); //发件人 vector<string>mta; //所有需要连接的mta,按照输入顺序
map<string,vector<string>>dest; //每个mta需要发送的用户
set<string>vis; while(cin>>t&&t!="*"){ //收件人
parse_address(t,user2,mta2);
if(vis.count(t))continue; //收件人重复则不插入
vis.insert(t);
if(!dest.count(mta2)){ //mta向量中没有该mta就插入并将向量与map中的string mta对应起来
mta.push_back(mta2);
dest[mta2]=vector<string>();
}
dest[mta2].push_back(t); //插入user@mta 完整形式
}
getline(cin,t); //吃掉"*" string data;
while(getline(cin,t)&&t[]!='*')data+=" "+t+"\n"; //将整个邮件存入一个字符串data中 //cout<<"***"<<data<<"***"<<endl;
for(int i=;i<mta.size();i++){
string mta2=mta[i];
vector<string>users=dest[mta2]; //users即为dest[mata2],mata2对应的需要发送的用户
cout<<"Connection between "<<mta1<<" and "<<mta2<<endl;
cout<<" HELO "<<mta1<<"\n";
cout<<" 250\n";
cout<<" MALL FROM:<" <<s<<">\n";
cout<<" 250\n";
bool ok=false;
for(int i=;i<users.size();i++){
cout<<"RCPT TO:<"<<users[i]<<">\n";
if(address.count(users[i])){
ok=true;
cout<<" 250\n";
}
else cout<<" 500\n";
}
if(ok){
cout<<" DATA\n";
cout<<" 254\n";
cout<<data;
cout<<".\n";
cout<<" 250\n";
}
cout<<" QUIT\n";
cout<<" 221\n";
}
}
//system("pause");
return ;
}
The Letter Carrier's Rounds(摘)的更多相关文章
- UVA 814 The Letter Carrier's Rounds
大致翻译: 对于电子邮件应用程序,您需要描述发生在成对mta之间的基于smtp的通信.发送方 的用户代理向发送消息传输代理(MTA)提供格式化的消息.发送MTA使用SimpleMail 传输协议(SM ...
- UVA 814 The Letter Carrier's Rounds(JAVA基础map)
题解:就是按照题目模拟就好 但是这个题目让我发现了我Java里面许多问题 具体看代码,但是还是分为这几个方面 属性的作用域问题,缓冲区问题,map与list映射的问题,输出多个空格不一定是/t,反转思 ...
- 紫书第5章 C++STL
例题 例题5-1 大理石在哪儿(Where is the Marble?,Uva 10474) 主要是熟悉一下sort和lower_bound的用法 关于lower_bound: http://blo ...
- [LeetCode] Letter Combinations of a Phone Number 电话号码的字母组合
Given a digit string, return all possible letter combinations that the number could represent. A map ...
- 17. Letter Combinations of a Phone Number
题目: Given a digit string, return all possible letter combinations that the number could represent. A ...
- 什么是Unicode letter
起因:从一段代码说起 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- LeetCode——Letter Combinations of a Phone Number
Given a digit string, return all possible letter combinations that the number could represent. A map ...
- 【摘选引用】在安全的SQL 密码也不过如此
SQL密码再安全也禁不住破解!!! http://www.sqlservercentral.com/articles/password+cracking/96540/ 备注:[摘选引用]是本人日常收集 ...
- OpenJudge2728:摘花生 解题报告
2728:摘花生 总时间限制: 1000ms 内存限制: 65536kB 描述 Hello Kitty 想摘点花生送给她喜欢的米老鼠.她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南 ...
随机推荐
- 3 linux、windows环境---路径分隔符不同导致的问题
问题:通常在eclipse,IntelliJ IDEA等进行代码编写时,程序中用到路径通常采用/job/test.properties或D:/job/test.properties等是形式作为文件路径 ...
- hdu5351 MZL's Border(规律题,java)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud MZL's Border Time Limit: 2000/1000 MS (Ja ...
- Injector Job深入分析
Injector Job的主要功能是根据crawlId在hbase中创建一个表,将将文本中的seed注入表中. (一)命令执行 1.运行命令 [jediael@master local]$ bin/n ...
- 网上查了点关于windows注册表的知识,发现基本名词没理解好,于是整理这篇笔记(可能个别地方不准确,先这么理解吧),有了这个理解,再去看网上的文章,就差不读了
打开注册表编辑器,左边窗格中显示的是“注册表项”,右边窗格中显示的是“注册表项的项值” 子项:子项是相对父项而言的,在某一个项(父项)下面出现的项(子项) 值项:一个项可以有一个或多个项值,当前被使用 ...
- Silverlight js html 相互调用
1.sl调用js 比如我们在页面中定义一个js函数: <script type="text/javascript"> function fnTest(ms ...
- Effective Java实作hashCode() - 就是爱Java
hashCode()这个方法,也是定义在Object class中,这个是所有class的base class,因此所有的class也都继承这个方法,预设是传回这个对象储存的内存地址编号,因为Mix覆 ...
- POJ 2152 Fire(树形DP)
题意: 思路:令F[i][j]表示 的最小费用.Best[i]表示以i为根节点的子树多有节点都找到负责消防站的最小费用. 好难的题... #include<algorithm> #incl ...
- JavaEE连接池泄漏问题检测Oracle数据库
1.项目环境 项目是典型的轻量级JavaEE项目,使用SSH框架构建,数据源使用DBCP管理,和Spring进行了整合. 项目数据库使用Oracle数据库. 项目DBCP配置内容如下 ###### D ...
- mybatis源代码分析:mybatis延迟加载机制改进
在上一篇博客<mybatis源代码分析:深入了解mybatis延迟加载机制>讲诉了mybatis延迟加载的具体机制及实现原理. 可以看出,如果查询结果对象中有一个属性是需要延迟加载的,那整 ...
- Php开发完全跨站点跨域名单点(SSO)同步登录和注销
From:http://www.cnblogs.com/JinkoWu/p/5056646.html 先来说说什么是单点登录(SSO).来自百科的介绍:SSO英文全称Single Sign On,单点 ...