uva814-The letter Carrier's Rounds

来源:互联网 发布:c4d 电脑配置 知乎 编辑:程序博客网 时间:2024/05/18 00:52

题目比较简单。

#include <iostream>#include <cstdio>#include <cstring>#include <set>#include <vector>#include <map>using namespace std;void change(const string&s, string &user, string& mta) {int k = s.find('@');user = s.substr(0, k);mta = s.substr(k+1);}int main(){    string s, user1, mta1, user2, mta2, t;    int k;    set<string> addr; //存放所有用户    while (cin >> s && s != "*") {       cin >> s >> k;       while (k--) { cin >> t; addr.insert(t + "@" + s);}    }    while (cin >> s &&s!= "*") {        change(s, user1, mta1);        vector<string> mta;//所有需要连接的mta,按输入顺序        map<string, vector<string> > dest;//每个mta需要发送的用户        set<string> vis;//存收件人        while (cin >> t && t != "*") {            change(t, user2, mta2);            if (vis.count(t))  continue;            vis.insert(t);            if(!dest.count(mta2)) {mta.push_back(mta2); dest[mta2] = vector<string>();}            dest[mta2].push_back(t);        }        getline(cin, t); // 吃回车        //读取邮件        string data;        while (getline(cin, t)&& t[0] != '*') { data += "     " + t + "\n";}        for (int i=0; i<mta.size(); i++) {            string mta2 = mta[i];            vector<string> users  = dest[mta2];            cout << "Connection between " << mta1 << " and " << mta2 << "\n";            cout << "     HELO " << mta1 << "\n     250\n";            cout << "     MAIL FROM:<" << s << ">\n     250\n";            bool ok = false;            for (int i=0; i<users.size(); i++) {                cout << "     RCPT TO:<" << users[i] << ">\n";                if (addr.count(users[i])) { ok = true; cout << "     250\n";}                else cout << "     550\n";            }            if (ok) {                cout << "     DATA\n     354\n";                cout << data;                cout << "     .\n     250\n";            }            cout << "     QUIT\n     221\n";        }    }    return 0;}


0 0
原创粉丝点击