Monday, July 11, 2016

UVa 12662 - Good Teacher

Accepted date: 2016-07-11
Run Time: 0.000
Ranking (as of 2016-07-11): 76 out of 403
Language: C++

/*
  UVa 12662 - Good Teacher

  To build using Visual Studio 2012:
    cl -EHsc -O2 UVa_12662_Good_Teacher.cpp
*/

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

const int n_max = 100, nr_chars_max = 3;

int positions[n_max];
char names[n_max][nr_chars_max + 1];

int main()
{
  int n;
  scanf("%d", &n);
  int nr_positions = 0;
  for (int p = 1; p <= n; p++) {
    scanf("%s", names[nr_positions]);
    if (names[nr_positions][0] != '?')
      positions[nr_positions++] = p;
  }
  int q;
  scanf("%d", &q);
  while (q--) {
    int p;
    scanf("%d", &p);
    int pi = lower_bound(positions, positions + nr_positions, p) - positions, l, r;
    if (pi == nr_positions) {
      for (r = p - positions[pi - 1]; r; r--)
        printf("right of ");
      printf("%s\n", names[pi - 1]);
    }
    else if (positions[pi] == p)
      printf("%s\n", names[pi]);
    else if (!pi) {
      for (l = positions[pi] - p; l; l--)
        printf("left of ");
      printf("%s\n", names[pi]);
    }
    else {
      r = p - positions[pi - 1], l = positions[pi] - p;
      if (r > l) {
        for ( ; l; l--)
          printf("left of ");
        printf("%s\n", names[pi]);
      }
      else if (r < l) {
        for ( ; r; r--)
          printf("right of ");
        printf("%s\n", names[pi - 1]);
      }
      else
        printf("middle of %s and %s\n", names[pi - 1], names[pi]);
    }
  }
  return 0;
}

No comments:

Post a Comment