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;
}
给出一行字符串,求该行字符串内符合题目所述要求的子串(邮箱地址)有多少。
解题思路:
没什么好说的,像这种模拟题做起来修修改改的很烦,最好在写之前认真审清题意,在草稿纸上写好大概思路,写的时候适当加点注释,细心再细心减少修改次数和错误率。另外这题“@”号左边符合要求的连续字符数乘以“@”号右边的“.”号右边符合要求的连续字符数就等于通过这个“@“号所能组合出来的符合要求的子串(邮箱地址)数。
#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;
}
相关文章推荐
- codeforces 232A Cycles (构建图,贪心+模拟)
- Codeforces 845 C. Two TVs (模拟)
- codeforces 591B Rebranding (模拟)
- Codeforces 581D Three Logos 模拟 枚举
- Codeforces 230C Shifts(模拟)
- CodeForces 734D Anton and Chess 【模拟】
- CodeForces 404 Marathon ( 浮点数取模 -- 模拟 )
- CodeForces - 400E(模拟+线段树或暴力)
- CodeForces 118C 【模拟】
- CodeForces 673C - Bear and Colors(模拟)
- CodeForces 342B Xenia and Spies (水题模拟,贪心)
- Codeforces 363A Soroban(算盘模拟)
- Codeforces 300A Array 【模拟】
- 模拟·CodeForces - 864C ·Bus
- 【恶心的模拟 && 找时刻问题】CodeForces - 883A Automatic Door
- CodeForces 637D Running with Obstacles(贪心模拟)
- Codeforces 549A. Face Detection[模拟]
- Codeforces-691C-Exponential notation(模拟)
- codeforces 148C Terse princess(有意思的模拟)
- CodeForces 644B【模拟】