Coder-Strike 2014 - Round 1 E. E-mail Addresses
此题题意就是匹配邮箱,提交时一直在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的更多相关文章
- 模拟 Coder-Strike 2014 - Round 1 A. Poster
题目地址:http://codeforces.com/problemset/problem/412/A /* 模拟:题目没看懂,但操作很简单,从最近的一头(如果不在一端要先移动到一端)往另一头移动,顺 ...
- Coder-Strike 2014 - Round 2
t题目链接:Coder-Strike 2014 - Round 2 A题:简单水题,注意能加入反复的数字.因此仅仅要推断是否能把Min和Max加入好.就能够了 B题:开一个sum计算每一个聊天总和,和 ...
- TCO 2014 Round 1C 概率DP
TCO round 1C的 250 和500 的题目都太脑残了,不说了. TCO round 1C 950 一个棋子,每次等概率的向左向右移动,然后走n步之后,期望cover的区域大小?求cover, ...
- Coder-Strike 2014 - Round 1(A~E)
题目链接 A. Poster time limit per test:1 secondmemory limit per test:256 megabytesinput:standard inputou ...
- 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, 老板想避免 ...
- Coder-Strike 2014 - Round 1 C. Pattern
题目的意思是给出n个长度相同的字符串然后找出与他们匹配的字符串 将字符串存入类似二维数组的里面,每一行代表一个字符串,遍历每列,判断每列是否有公共的匹配字符,如果有输出任意一个 如果没有输出'?' # ...
- Coder-Strike 2014 - Round 1 B. Network Configuration
题目的意思就是给每台电脑的最大传输速度,可以限制每台电脑的最大速度,然后选择k台电脑,使这k台电脑有相同的速度,且这个速度最大 典型的贪心算法,电脑的速度排个序,选择第k大速度即可 #include ...
- Coder-Strike 2014 - Round 1 A. Poster
主要就是先将梯子移动到最左边或者最右边 k>n/2时移动到最右边 k<=n/2时移动到最左边 然后遍历一遍 #include <iostream> #include <v ...
- Google Code Jam 2014 Round 1B Problem B
二进制数位DP,涉及到数字的按位与操作. 查看官方解题报告 #include <cstdio> #include <cstdlib> #include <cstring& ...
随机推荐
- IOS开发中有用的第三方库
#Objective-C中最受瞩目库 [链接](https://github.com/languages/Objective-C/most_watched) * [three20](https:/ ...
- CLR via C#(09)-扩展方法
对于一些现成的类,如果我们想添加一些新的方法来完善功能,但是不想改变已有的封装,也不想使用派生类,那么该怎么办呢?这里我们可以使用扩展方法. 一见钟情--初识扩展 扩展方法使您能够向现有类型“添加”方 ...
- **代码审查:Phabricator命令行工具Arcanist的基本用法
Phabricator入门手册 http://www.oschina.net/question/191440_125562 Pharicator是FB的代码审查工具,现在我所在的团队也使用它来进行代码 ...
- 重温WCF之WCF抛出异常的处理SOAP Fault(十二)
1.(服务端)抛出和(客户端)捕获SOAP Fault 当我们需要客户端获取到WCF服务端的抛出的异常的时候,使用FaultException类 WCF类库在System.ServiceModel命名 ...
- elementar OS体验
关于其说明请参考https://linuxtoy.org/archives/elementary-os-luna.html
- mac下php开发环境搭建+CI框架使用
一.启动apache: apachectl start 停止: apachectl stop 配置文件: vi /etc/apache2/httpd.conf 一.修改端口 因为80端口不想被占用,8 ...
- 7-11使用UNION合并查询
合并查询的语法: SELECT ...FROM 表名一 UNION SELECT ...FROM 表名二 合并查询的特点: 1: 合并表中的列的个数,数据类型数据类型相同或兼容. 2:UNION 默 ...
- Accelerating Matlab
Matlab is a very useful programming environment, but it also has many inefficiencies. You might thin ...
- 建造者模式与原型模式/builder模式与prototype模式/创建型模式
建造者模式 定义 用于简化复杂对象的创建 JDK中的建造者模式 java.lang.StringBuilder中的append()方法,每次调用后返回修改后的对象本身. public StringBu ...
- loj 1337
题目链接:http://lightoj.com/volume_showproblem.php?problem=1337 思路:对于搜过的区域进行标记,如果要求的点落在已经搜过的区域,那么直接取出来即可 ...