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 想摘点花生送给她喜欢的米老鼠.她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南 ...
随机推荐
- Codeforces Round #350 (Div. 2)A,B,C,D1
A. Holidays time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- JS创建对象的七大模式
1. 工厂模式 function createPerson(name, age, job){var o = new Object();o.name = name;o.age = age;o.job = ...
- maven项目依赖被改为文件夹时如何改回lib
如图
- xen之基本搭建
1. 前言 所需包: kernel-xen xen xen-libs (xen依赖包) xen_runtime (xen依赖包) 以上xen包需要版本号一致,例如4.1.3版本,这里使用xm接口管理工 ...
- JavaWeb学习笔记--2.3内置对象
参考资料:http://www.cnblogs.com/qqnnhhbb/archive/2007/10/16/926234.html 目录 1. JSP内置对象分类2. 属性保存范围 2.1 pag ...
- Ueditor开发经验
Ueditor是百度开发的一款免费使用的富文本编辑器. 先前就一直使用Ueditor,觉得功能挺多的,而且还给出了详细的文档,供二次开发. 但Ueditor已经出新的版本(和先前版本很不相同),网上很 ...
- Oracle Sequence与Trigger的使用
一:建立sequence -- Create sequence create sequence SEQ_PUSH minvalue maxvalue start increment cache ; 二 ...
- Qt实现基于G.729A(G729A)的语音聊天
一.G.729协议简介G.729协议是由ITU-T的第15研究小组提出的,并在1996年3月通过的8Kbps的语音编码协议.G.729系列主要有以下几种:G.729—最基本的G.729标准协议,原始版 ...
- 常用监控SQL
1.---监控等待事件 select SESSION_ID,NAME,P1,P2,P3,WAIT_TIME,CURRENT_OBJ#,CURRENT_FILE#,CURRENT_BLOCK# ...
- Java内存回收(垃圾回收)机制总结
一.背景: Java程序员编写程序时,对于新建的对象,当不再需要此对象时,不必去释放这个对象所占用的空间,这个工作是由Java虚拟机自己完成的 ,即内存回收或垃圾回收. 二.如何知道一个对象所占用的空 ...