zoukankan      html  css  js  c++  java
  • CodeForces

    题目连接:http://codeforces.com/problemset/problem/589/A

    题目大意:给你n个字符串,请你将它分类并输出。其中不分字母大小写(即‘A’='a'),当字符串尾缀为@bmail.com时,则@符号前面的字符串如果有‘.’则消掉,如果有'+',则‘+’字符及之后到@之前的字符无效。看样例就明白了。

    map知识点:map里面存的就是pair类型,其定义方式为map<第一个数据类型,第二个数据类型> name,第一个数据类型为map的数据,第二个数据类型为map数据的值,故压入map的一个简单方式可以这样:map[第一个数据类型数据]=第二个数据类型数据。map存储数据是有序的,故能快速找到map里面有没有存第一个数据,其寻找方式为name.find(第一个数据)==name.end();这个意思是如果没找到,find()便找到map的最后,表达式真值为1,表示未找到第一个数据。

    这题的ac代码:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<vector>
     4 #include<cstdio>
     5 #include<map>
     6 using namespace std;
     7 char str[20005][105],str1[20005][105],per[]="@bmail.com",check[15];
     8 int main()
     9 {
    10     int n;
    11     while(cin>>n)
    12     {
    13         int count=0;
    14         getchar();
    15         vector<int> vec[20005];
    16         map<string,int> amap;
    17         for(int i=0;i<n;i++)
    18         {
    19             scanf("%s",str[i]);
    20             int len=strlen(str[i]);
    21             for(int j=0;j<len;j++)
    22             {
    23                 str1[i][j]=str[i][j];
    24                 if(str[i][j]<='Z'&&str[i][j]>='A')
    25                 str1[i][j]-=('A'-'a');
    26             }
    27             if(len<10)
    28             check[0]='';
    29             else
    30             for(int j=0;j<10;j++)
    31             check[j]=str1[i][len-(10-j)];
    32         //    cout<<"#   "<<check<<endl;
    33             if(strcmp(check,per)==0)
    34             {
    35                 for(int j=0;j<len-10;j++)
    36                 {
    37                     if(str1[i][j]=='.')
    38                     {
    39                         for(int l=j;l<len;l++)
    40                         str1[i][l]=str1[i][l+1];
    41                         j--;
    42                     }
    43                     else if(str1[i][j]=='+')
    44                     {
    45                         for(int l=j;l<=j+10;l++)
    46                         str1[i][l]=check[l-j];
    47                         str1[i][j+11]='';
    48                         break;
    49                     }
    50                 }
    51             }
    52             if(amap.find(str1[i])==amap.end())
    53             {
    54                 count++;
    55                 amap[str1[i]]=count;
    56                 vec[count].push_back(i);
    57             }
    58             else
    59             vec[amap[str1[i]]].push_back(i);
    60         //    cout<<"****"<<str1[i]<<endl;
    61         //    cout<<t<<endl;
    62         }
    63         printf("%d
    ",count);
    64         for(int j=1;j<=count;j++)
    65         {
    66             printf("%d",vec[j].size());
    67             for(int l=0;l<vec[j].size();l++)
    68             printf(" %s",str[vec[j][l]]);
    69             printf("
    ");
    70         }
    71     }
    72     return 0;
    73 }
  • 相关阅读:
    实现系统托盘
    MDI窗体应用
    C#窗体的常用设置
    什么是UWP应用
    关于用js写缓动 动画
    关于tab栏切换的解析
    函数
    for循环
    if语句
    js
  • 原文地址:https://www.cnblogs.com/wwq-19990526/p/9408158.html
Copyright © 2011-2022 走看看