Ranking (as of 2015-10-19): 35 out of 945
Language: C++
/*
UVa 11157 - Dynamic Frog
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_11157_Dynamic_Frog.cpp
*/
#include <algorithm>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int N_max = 100;
struct stone {
char type_;
int m_;
} stones[N_max + 2] = {{'B', 0}};
int main()
{
int T;
scanf("%d", &T);
for (int t = 1; t <= T; t++) {
int N, D;
scanf("%d %d", &N, &D);
stones[N + 1].type_ = 'B';
stones[N + 1].m_ = D;
for (int n = 1; n <= N; n++) {
char s[16];
scanf("%s", s);
stones[n].type_ = s[0], stones[n].m_ = atoi(s + 2);
}
#ifdef DEBUG
for (int n = 0; n <= N + 1; n++)
printf("%c-%d%c", stones[n].type_, stones[n].m_, ((n <= N) ? ' ' : '\n'));
#endif
int max_d = 0;
if (N) {
#ifdef DEBUG
puts("left to right");
#endif
for (int i = 0; i <= N; ) {
if (stones[i + 1].type_ == 'B') {
max_d = max(max_d, stones[i + 1].m_ - stones[i].m_);
#ifdef DEBUG
printf("%d - %d: %d %d\n",
i, i + 1, stones[i + 1].m_ - stones[i].m_, max_d);
#endif
i++;
}
else {
max_d = max(max_d, stones[i + 2].m_ - stones[i].m_);
#ifdef DEBUG
printf("%d - %d: %d %d\n",
i, i + 2, stones[i + 2].m_ - stones[i].m_, max_d);
#endif
i += 2;
if (stones[i].type_ == 'S')
stones[i].type_ = 0; // will not exist on the way back to the left bank
}
}
#ifdef DEBUG
puts("right to left");
#endif
for (int i = N + 1; i > 0; ) {
int j = i - 1;
for ( ; j > 0 && !stones[j].type_; j--)
;
max_d = max(max_d, stones[i].m_ - stones[j].m_);
#ifdef DEBUG
printf("%d - %d: %d %d\n", i, j, stones[i].m_ - stones[j].m_, max_d);
#endif
i = j;
}
}
else
max_d = D;
printf("Case %d: %d\n", t, max_d);
}
return 0;
}
No comments:
Post a Comment