2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest A Email Aliases(模拟STL vector+map)

时间:2022-09-21 19:41:44

Email AliasesCrawling in process... Crawling failed Time Limit:2000MS     Memory Limit:524288KB     64bit IO Format:%I64d & %I64u

Submit Status

Description

 

Input

 

Output

 

Sample Input

 

Sample Output

 

Hint

 

Description

Polycarp has quite recently learned about email aliases. Of course, he used to suspect that the case of the letters doesn't matter in email addresses. He also learned that a popular mail server in Berland bmail.com ignores dots (characters '.') and all the part of an address from the first character "plus" ('+') to character "at" ('@') in a login part of email addresses.

Formally, any email address in this problem will look like "login@domain", where:

  • a "login" is a non-empty sequence of lowercase and uppercase letters, dots ('.') and pluses ('+'), which starts from a letter;
  • a "domain" is a non-empty sequence of lowercase and uppercase letters and dots, at that the dots split the sequences into non-empty words, consisting only from letters (that is, the "domain" starts from a letter, ends with a letter and doesn't contain two or more consecutive dots).

When you compare the addresses, the case of the characters isn't taken into consideration. Besides, when comparing the bmail.com addresses, servers ignore the dots in the login and all characters from the first character "plus" ('+') to character "at" ('@') in login part of an email address.

For example, addresses saratov@example.com and SaratoV@Example.Com correspond to the same account. Similarly, addresses ACM.ICPC.@bmail.com and A.cmIcpc@Bmail.Com also correspond to the same account (the important thing here is that the domains of these addresses are bmail.com). The next example illustrates the use of character '+' in email address aliases: addresses polycarp+contest@BMAIL.COM, Polycarp@bmail.com and polycarp++acm+icpc@Bmail.Com also correspond to the same account on the server bmail.com. However, addresses a@bmail.com.ru and a+b@bmail.com.ru are not equivalent, because '+' is a special character only for bmail.com addresses.

Polycarp has thousands of records in his address book. Until today, he sincerely thought that that's exactly the number of people around the world that he is communicating to. Now he understands that not always distinct records in the address book represent distinct people.

Help Polycarp bring his notes in order by merging equivalent addresses into groups.

Input

The first line of the input contains a positive integer n (1 ≤ n ≤ 2·104) — the number of email addresses in Polycarp's address book.

The following n lines contain the email addresses, one per line. It is guaranteed that all of them are correct. All the given lines are distinct. The lengths of the addresses are from 3 to 100, inclusive.

Output

Print the number of groups k and then in k lines print the description of every group.

In the i-th line print the number of addresses in the group and all addresses that belong to the i-th group, separated by a space. It is allowed to print the groups and addresses in each group in any order.

Print the email addresses exactly as they were given in the input. Each address should go to exactly one group.

Sample Input

Input
6
ICPC.@bmail.com
p+con+test@BMAIL.COM
P@bmail.com
a@bmail.com.ru
I.cpc@Bmail.Com
a+b@bmail.com.ru
Output
4
2 ICPC.@bmail.com I.cpc@Bmail.Com
2 p+con+test@BMAIL.COM P@bmail.com
1 a@bmail.com.ru
1 a+b@bmail.com.ru
/*
不用map,查找的时候会超时的,血的教训
*/
#include<iostream>
#include<bits/stdc++.h>
#include<string.h>
#include<string>
#include<stdio.h>
#define N 20010
using namespace std;
struct node
{
string name,lname;//名字
};
int main()
{
//freopen("in.txt","r",stdin);
int n,i;
node fr[N];
char ch[];
int num[N]={};
map<string,int>mop;
vector<string>v[N];
int ans=;
int len=;
bool visit[N];
scanf("%d",&n);
getchar();
for(int i=;i<n;i++)//处理大小写
{
v[i].clear();
scanf("%s",&ch);
fr[i].name=ch;
fr[i].lname=fr[i].name;
transform(fr[i].lname.begin(), fr[i].lname.end(), fr[i].lname.begin(), ::toupper);
v[i].clear();
//cout<<i<<endl;
string s="";
if(fr[i].lname.size()>=)
s=fr[i].lname.substr(fr[i].lname.size()-,fr[i].lname.size()-);
//cout<<s<<endl;
if(s=="@BMAIL.COM")//特殊邮箱的
{
string str="";
for(int j=;j<fr[i].name.size();j++)
{
if(fr[i].name[j]=='+'||fr[i].name[j]=='@')
break;
if(fr[i].name[j]=='.')
continue;
str+=fr[i].lname[j];
}
fr[i].lname=str;
}//处理完了
if(mop.find(fr[i].lname)==mop.end())mop[fr[i].lname]=len++;
int o=mop[fr[i].lname];
++num[o];
v[o].push_back(fr[i].name);
/*int flag=0;
for(int j=0;j<len;j++)//寻找的这个地方超时
{
if(fr[i].lname==fr[j].lname)
{
v[j].push_back(fr[i].name);
flag=1;
visit[i]=false;
}
}
if(flag==0)
{
v[len++].push_back(fr[i].name);
ans++;
}*/
}
printf("%d\n",len);
for(int i=;i<len;i++)
{
printf("%d",num[i]);
for(int j=;j<v[i].size();j++)
{
printf(" %s",v[i][j].c_str());
}
printf("\n");
}
return ;
}
 

 

2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest A Email Aliases(模拟STL vector+map)的更多相关文章

  1. 2018-2019 ICPC&comma; NEERC&comma; Southern Subregional Contest

    目录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Codeforces 1070) A.Find a Number(BFS) C.Clou ...

  2. Codeforces 2018-2019 ICPC&comma; NEERC&comma; Southern Subregional Contest

    2018-2019 ICPC, NEERC, Southern Subregional Contest 闲谈: 被操哥和男神带飞的一场ACM,第一把做了这么多题,荣幸成为7题队,虽然比赛的时候频频出锅 ...

  3. 2018-2019 ICPC&comma; NEERC&comma; Southern Subregional Contest &lpar;Online Mirror&rpar; Solution

    从这里开始 题目列表 瞎扯 Problem A Find a Number Problem B Berkomnadzor Problem C Cloud Computing Problem D Gar ...

  4. Codeforces1070 2018-2019 ICPC&comma; NEERC&comma; Southern Subregional Contest &lpar;Online Mirror&comma; ACM-ICPC Rules&comma; Teams Preferred&rpar;总结

    第一次打ACM比赛,和yyf两个人一起搞事情 感觉被两个学长队暴打的好惨啊 然后我一直做*题,yyf一直在切神仙题 然后放一波题解(部分) A. Find a Number LINK 题目大意 给你 ...

  5. codeforce1070 2018-2019 ICPC&comma; NEERC&comma; Southern Subregional Contest &lpar;Online Mirror&comma; ACM-ICPC Rules&comma; Teams Preferred&rpar; 题解

    秉承ACM团队合作的思想懒,这篇blog只有部分题解,剩余的请前往星感大神Star_Feel的blog食用(表示男神汉克斯更懒不屑于写我们分别代写了下...) C. Cloud Computing 扫 ...

  6. 2018-2019 ICPC&comma; NEERC&comma; Southern Subregional Contest &lpar;Online Mirror&comma; ACM-ICPC Rules&comma; Teams Preferred&rpar;

    A. Find a Number 找到一个树,可以被d整除,且数字和为s 记忆化搜索 static class S{ int mod,s; String str; public S(int mod, ...

  7. 2018&period;10&period;20 2018-2019 ICPC&comma;NEERC&comma;Southern Subregional Contest&lpar;Online Mirror&comma; ACM-ICPC Rules&rpar;

    i207M的“怕不是一个小时就要弃疗的flag”并没有生效,这次居然写到了最后,好评=.= 然而可能是退役前和i207M的最后一场比赛了TAT 不过打得真的好爽啊QAQ 最终结果: 看见那几个罚时没, ...

  8. 2018-2019 ICPC&comma; NEERC&comma; Southern Subregional Contest &lpar;Online Mirror&comma; ACM-ICPC Rules&comma; Teams Preferred&rpar; Solution

    A. Find a Number Solved By 2017212212083 题意:$找一个最小的n使得n % d == 0 并且 n 的每一位数字加起来之和为s$ 思路: 定义一个二元组$&lt ...

  9. 【&ast;2000】【2018-2019 ICPC&comma; NEERC&comma; Southern Subregional Contest C 】Cloud Computing

    [链接] 我是链接,点我呀:) [题意] [题解] 我们可以很容易知道区间的每个位置有哪些安排可以用. 显然 我们优先用那些花费的钱比较少的租用cpu方案. 但一个方案可供租用的cpu有限. 我们可以 ...

随机推荐

  1. linux环境下 python环境import找不到自定义的模块

    linux环境下 python环境import找不到自定义的模块 问题现象: Linux环境中自定义的模块swport,import swport 出错.swport模块在/root/sw/目录下. ...

  2. JavaScript里面的arguments到底是个啥?

    类数组对象:arguments 总所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments ...

  3. 【刷题】BZOJ 4195 &lbrack;Noi2015&rsqb;程序自动分析

    Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,-代表程序中出现的变量,给定n个形如xi=xj或x ...

  4. MySQL错误代码

    常见: 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败 1010:不能删 ...

  5. SELU︱在keras、tensorflow中使用SELU激活函数

    arXiv 上公开的一篇 NIPS 投稿论文<Self-Normalizing Neural Networks>引起了圈内极大的关注,它提出了缩放指数型线性单元(SELU)而引进了自归一化 ...

  6. CSS01--概述与选择器

    CSS:Cascading Style Sheets,层叠样式表.我们之前已经说过,HTML解决的是网页内容(结构)的问题,而CSS立足于网页的表现方面的问题,则样式定义如何显示HTML标签,js负责 ...

  7. Redis 搜索引擎优化

    场景 大家如果是做后端开发的,想必都实现过列表查询的接口,当然有的查询条件很简单,一条 SQL 就搞定了,但有的查询条件极其复杂,再加上库表中设计的各种不合理,导致查询接口特别难写,然后加班什么的就不 ...

  8. OpenCV支持向量机SVM对线性不可分数据的处理

    支持向量机对线性不可分数据的处理 目标 本文档尝试解答如下问题: 在训练数据线性不可分时,如何定义此情形下支持向量机的最优化问题. 如何设置 CvSVMParams 中的参数来解决此类问题. 动机 为 ...

  9. php中那些我还没弄明白的名词解释

    1.正则表达式引擎,引擎是什么? 2.语言构造器和函数的区别 3.可变函数

  10. liunx基础(5)

    第十三单元 硬盘分区.格式化及文件系统的管理二 1. 文件系统的挂载与卸载(详见linux系统管理P406)1) 掌握挂载的定义:挂载指将一个设备(通常是存储设备)挂接到一个已存在的目录上.2) 掌握 ...