http://codeforces.com/problemset/problem/116/D
/*30ms,0KB*/
#include<cstdio>
const int mx = 155;
char g[mx][mx];
int left[mx], right[mx];
int main()
{
int n, m, i, j, posy, dir;
int cnt = -1;
scanf("%d%d", &n, &m);
int maxn = 0;
for (i = 1; i <= n; ++i)
{
getchar();
for (j = 1; j <= m; ++j)
{
g[i][j] = getchar();
if (g[i][j] == 'W')
{
if (left[i] == 0) left[i] = j;
right[i] = j;
maxn = i;
}
}
}
posy = 1;
dir = 0; ///左
///一开始在n=0,posy=1处
for (i = 1; i <= maxn; ++i)
{
if (dir)///右
{
if (right[i] && right[i] > posy) cnt += right[i] - posy + right[i] - left[i] + 1;
else if (left[i] && left[i] < posy) cnt += posy - left[i] + 1;
else ++cnt;
if (left[i]) posy = left[i];
}
else///左
{
if (left[i] && left[i] < posy) cnt += posy - left[i] + right[i] - left[i] + 1;
else if (right[i] > posy) cnt += right[i] - posy + 1;
else ++cnt;
if (right[i]) posy = right[i];
}
dir=!dir;
}
if (cnt == -1) cnt = 0;
printf("%d\n", cnt);
return 0;
}

本文提供了一种高效的解决复杂问题的方法,通过详细解释算法和代码实现,帮助读者理解如何在Codeforces竞赛中快速找到解题思路。重点介绍了如何利用数据结构和算法来优化解决方案,提升编程效率。

被折叠的 条评论
为什么被折叠?



