您的位置:首页 > 大数据 > 人工智能

CodeForces 412E - E-mail Addresses (模拟)

2014-04-27 22:39 357 查看
题目大意:

  给出一行字符串,求该行字符串内符合题目所述要求的子串(邮箱地址)有多少。

解题思路:

  没什么好说的,像这种模拟题做起来修修改改的很烦,最好在写之前认真审清题意,在草稿纸上写好大概思路,写的时候适当加点注释,细心再细心减少修改次数和错误率。另外这题“@”号左边符合要求的连续字符数乘以“@”号右边的“.”号右边符合要求的连续字符数就等于通过这个“@“号所能组合出来的符合要求的子串(邮箱地址)数。

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;

char s[1000005];
int len;

long long findl (int i)
{
long long num=0;
while (i>=0)
{
if (s[i]>='a'&&s[i]<='z')
num++;
else if (s[i]!='_'&&(s[i]<'0'||s[i]>'9'))
break;
i--;
}
return num;
}

long long findr (int i)
{
long long num=0;
int j=i;
while (i<len)
{
if (!((s[i]>='a'&&s[i]<='z')||(s[i]>='0'&&s[i]<='9')))
break;
i++;
}
if (i>=len||s[i]!='.'||j==i)
return 0;
i++;
while (i<len)
{
if (s[i]>='a'&&s[i]<='z')
num++;
else
break;
i++;
}
return num;
}

int main()
{
gets(s);
len=strlen(s);
int i=0;
long long ans=0;
while (i<len)
{
if (s[i]=='@')
{
long long numl=findl(i-1);
long long numr=findr(i+1);
ans+=numl*numr;
}

i++;
}
printf("%I64d\n", ans);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  解题报告