此题题意就是匹配邮箱,提交时一直在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. SQL分页存储过程——表名、返回的列、排序字段、排序类型、条件、页尺寸、页码

    ALTER PROCEDURE [dbo].[SP_LGY_ICU_PAGECUT] ), -- 表名 ) = '*', -- 需要返回的列 )='''', -- 排序的欄位名 , -- 設置排序類型 ...

  2. phpMailer邮件发送

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. [v9] 列表页 调用 正文内容 或 自定义 字段(moreinfo的调用方法)

    "才能使用的字段) id content readpoint groupids_view paginationtype maxcharperpage template paytype all ...

  4. WPF中使用ReportViewer报表

    本篇博客将介绍如何在WPF中使用ReportViewer控件. 1. 环境准备:下载安装最新版ReportViewer(PS:需要安装Microsoft SQL Server System CLR T ...

  5. 关于ICE

    转自:http://wenda.chinabaike.com/b/38322/2013/1103/614756.html 一.ICE产生的背景 基于信令协议的多媒体传输是一个两段式传输.首先,通过信令 ...

  6. 6个值得推荐的Android开源框架简介(转)

    虽然我们在做app的时候并不一定用到框架,但是一些好框架的思想是非常有学习价值的 1.volley 项目地址 https://github.com/smanikandan14/Volley-demo  ...

  7. 在Window的IIS中创建FTP的Site并用C#进行文件的上传下载

    文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机. 这些文件存储在运行 FTP 服务器软件的服务器计算机上. 然后,远程计算机可以使用 FTP ...

  8. javascript中时间的手动创建date的方式

    new Date("month dd,yyyy hh:mm:ss"); new Date("month dd,yyyy"); new Date(yyyy,mth ...

  9. SQLServer 表结构相关查询(快速了解数据库)

    -- 表结构查询 SELECT 表名 then d.name else '' end, 表说明 then isnull(f.value,'') else '' end, 字段序号 = a.colord ...

  10. LoadRunner 事务函数

    status 包括LR_PASS, LR_FAIL,  LR_AUTO,  LR_STOP(这个没用过) lr_set_transaction_instance_status(status); 可以根 ...