Files
OI-source/2.814.cpp
2023-08-03 09:22:52 +08:00

86 lines
1.5 KiB
C++

#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<set>
using namespace std;
inline void pro_addr(const string &s,string &usr,string& mta)
{
int p=s.find('@');
usr=s.substr(0,p);
mta=s.substr(p+1);
}
int main()
{
#ifdef local
freopen("pro.in","r",stdin);
#endif
int k;
string s,t,u1,m1,u2,m2;
set<string> addr;
while(cin>>s&&s!="*")
{
cin>>s>>k;
while(k--)
{
cin>>t;
addr.insert(t+"@"+s);
}
}
while(cin>>s&&s!="*")
{
pro_addr(s,u1,m1);
vector<string> mta;
map<string,vector<string>> dest;
set<string> vis;
while(cin>>t&&t!="*")
{
pro_addr(t,u2,m2);
if(vis.count(t)) continue;
vis.insert(t);
if(!dest.count(m2))
{
mta.push_back(m2);
dest[m2]=vector<string>();
}
dest[m2].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> usr=dest[mta2];
cout<<"Connection between "<<m1<<" and "<<mta2<<endl;
cout<<" HELO "<<m1<<"\n";
cout<<" 250\n";
cout<<" MAIL FROM:<"<<s<<">\n";
cout<<" 250\n";
bool ok=false;
for(int i=0;i<usr.size();i++)
{
cout<<" RCPT TO:<"<<usr[i]<<">\n";
if(addr.count(usr[i]))
{
ok=true;
cout<<" 250\n";
}
else cout<<" 550\n";
}
if(ok)
{
cout<<" DATA\n";
cout<<" 354\n";
cout<<data;
cout<<" .\n";
cout<<" 250\n";
}
cout<<" QUIT\n";
cout<<" 221\n";
}
}
return 0;
}