此题题意就是匹配邮箱,提交时一直在test 14上WA,看了测试用例之后才发现计数用的int溢出,要用long long还是做题经验不够,导致此题未能通过,以后一定要考虑数据量大小

题意是找出邮件地址的数量,永许出现相同的地址

此题最重要的部分是要注意邮件地址的构成规则

1、邮件开始部分必须是字母串,数字和‘_’,但必须以字母开头

2、必须有字符‘@’

3、接着是非空的字母或数字

4、接着是必须有‘.’

5、地址必须以非空的字母串结束,不能含有数字,'_',和'.'

本题的想法是先按照@对字符串进行分割,存入到vector<string>

然后第i个字符串作为邮件的开头,第i+1个字符串作为邮件结尾 ( 邮件=开头@结尾

然后统计构成邮件开头的数量(注意邮件开头是以字母开头)

  1、遇到‘.’,计数规0

  2、遇到字母计数加1

3、遇到数字和‘_’计数不变

然后统计构成邮件结尾的数量

  1、在未遇到‘.’之前遇到非数字和字母则为不合法邮件

  2、遇到'.'开始计数

  3、在开始计数后,遇到‘.’,分为两种情况

      1、开始计数后马上就遇到'.',如a@b..cc,则为不合法邮件停止计数

      2、之后才遇到,如a@b.adc.com 则停止计数

  4、开始计数后遇到非字母字符停止计数

然后将邮件开头的数量乘以邮件结尾的数量即为合法邮件的数量

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <cctype>
#include <sstream>
using namespace std; std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
} std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
split(s, delim, elems);
return elems;
} long long countHeadAddress(string& str){
long long cnt = ;
for(int i = ; i < str.length(); ++ i){
if(str[i] == '.') cnt = ;
else if(islower(str[i])){
cnt++;
}
}
return cnt;
} long long countTailAddress(string& str){
long long cnt = ;
bool flag = false;
for(int i = ; i < str.length(); ++ i){
if(!flag){
if(i == && str[i] == '.') break;
if(str[i]=='.') flag=true;
else if(islower(str[i]) || (str[i]>=''&&str[i] <='')){ }
else break;
}else{
if(islower(str[i])){
cnt++;
}else break;
}
}
return cnt;
} int main(){
string saveStr;
cin >> saveStr;
vector<string> letter= split(saveStr,'@');
long long cnt = ;
for(int i = ; i < letter.size()-; ++ i){
cnt+=countHeadAddress(letter[i])*countTailAddress(letter[i+]);
}
cout<<cnt<<endl;
}

Coder-Strike 2014 - Round 1 E. E-mail Addresses的更多相关文章

  1. 模拟 Coder-Strike 2014 - Round 1 A. Poster

    题目地址:http://codeforces.com/problemset/problem/412/A /* 模拟:题目没看懂,但操作很简单,从最近的一头(如果不在一端要先移动到一端)往另一头移动,顺 ...

  2. Coder-Strike 2014 - Round 2

    t题目链接:Coder-Strike 2014 - Round 2 A题:简单水题,注意能加入反复的数字.因此仅仅要推断是否能把Min和Max加入好.就能够了 B题:开一个sum计算每一个聊天总和,和 ...

  3. TCO 2014 Round 1C 概率DP

    TCO round 1C的 250 和500 的题目都太脑残了,不说了. TCO round 1C 950 一个棋子,每次等概率的向左向右移动,然后走n步之后,期望cover的区域大小?求cover, ...

  4. Coder-Strike 2014 - Round 1(A~E)

    题目链接 A. Poster time limit per test:1 secondmemory limit per test:256 megabytesinput:standard inputou ...

  5. Coder-Strike 2014 - Round 1 D. Giving Awards

    题目的意思是 老板给n个人发工资,x欠y的工资,the joy of person x from his brand new money reward will be much less, 老板想避免 ...

  6. Coder-Strike 2014 - Round 1 C. Pattern

    题目的意思是给出n个长度相同的字符串然后找出与他们匹配的字符串 将字符串存入类似二维数组的里面,每一行代表一个字符串,遍历每列,判断每列是否有公共的匹配字符,如果有输出任意一个 如果没有输出'?' # ...

  7. Coder-Strike 2014 - Round 1 B. Network Configuration

    题目的意思就是给每台电脑的最大传输速度,可以限制每台电脑的最大速度,然后选择k台电脑,使这k台电脑有相同的速度,且这个速度最大 典型的贪心算法,电脑的速度排个序,选择第k大速度即可 #include ...

  8. Coder-Strike 2014 - Round 1 A. Poster

    主要就是先将梯子移动到最左边或者最右边 k>n/2时移动到最右边 k<=n/2时移动到最左边 然后遍历一遍 #include <iostream> #include <v ...

  9. Google Code Jam 2014 Round 1B Problem B

    二进制数位DP,涉及到数字的按位与操作. 查看官方解题报告 #include <cstdio> #include <cstdlib> #include <cstring& ...

随机推荐

  1. IOS开发中有用的第三方库

    #Objective-C中最受瞩目库 [链接](https://github.com/languages​​/Objective-C/most_watched) * [three20](https:/ ...

  2. CLR via C#(09)-扩展方法

    对于一些现成的类,如果我们想添加一些新的方法来完善功能,但是不想改变已有的封装,也不想使用派生类,那么该怎么办呢?这里我们可以使用扩展方法. 一见钟情--初识扩展 扩展方法使您能够向现有类型“添加”方 ...

  3. **代码审查:Phabricator命令行工具Arcanist的基本用法

    Phabricator入门手册 http://www.oschina.net/question/191440_125562 Pharicator是FB的代码审查工具,现在我所在的团队也使用它来进行代码 ...

  4. 重温WCF之WCF抛出异常的处理SOAP Fault(十二)

    1.(服务端)抛出和(客户端)捕获SOAP Fault 当我们需要客户端获取到WCF服务端的抛出的异常的时候,使用FaultException类 WCF类库在System.ServiceModel命名 ...

  5. elementar OS体验

    关于其说明请参考https://linuxtoy.org/archives/elementary-os-luna.html

  6. mac下php开发环境搭建+CI框架使用

    一.启动apache: apachectl start 停止: apachectl stop 配置文件: vi /etc/apache2/httpd.conf 一.修改端口 因为80端口不想被占用,8 ...

  7. 7-11使用UNION合并查询

    合并查询的语法: SELECT ...FROM  表名一 UNION SELECT ...FROM 表名二 合并查询的特点: 1: 合并表中的列的个数,数据类型数据类型相同或兼容. 2:UNION 默 ...

  8. Accelerating Matlab

    Matlab is a very useful programming environment, but it also has many inefficiencies. You might thin ...

  9. 建造者模式与原型模式/builder模式与prototype模式/创建型模式

    建造者模式 定义 用于简化复杂对象的创建 JDK中的建造者模式 java.lang.StringBuilder中的append()方法,每次调用后返回修改后的对象本身. public StringBu ...

  10. loj 1337

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1337 思路:对于搜过的区域进行标记,如果要求的点落在已经搜过的区域,那么直接取出来即可 ...