Página Principal

MC521-1s2014

MC621-2s2014

MC521-1s2015

MC621-2s2015

MC521-1s2016

Conteúdo

Área Reservada

edit sidebar

LA 6662

Autor: Mateus Bellomo

Código:


#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cassert>
#include <time.h>
#include <ctime>

using namespace std;

#define INF 0x3f3f3f3f
#define MAX 210
#define L 0
#define R 1

typedef struct{
  int d; // 0 = L, 1 = R
  int id;
  int pos;
  bool removed;
}ant;

int n, l;
vector<ant> v;

void solve(){
  int antn = n;
  int time = 0;
  int lastant = 0;

  while(true){
    bool flag = true;
    for(int i = 0; i < (int) v.size(); i++){
      if(!v[i].removed){
        if(v[i].d == L) v[i].pos--;
        else v[i].pos++;
        if(v[i].pos <= 0 || v[i].pos >= l){
          v[i].removed = true; antn--;
          if(flag || v[i].d == L) lastant = v[i].id;
          flag = false;
        }
      }
    }
    time++;
    if(antn == 0) break;

    for(int i = 0; i < (int) v.size(); i++)
      for(int j = i+1; j < (int) v.size(); j++)
        if((!v[i].removed && !v[j].removed) && v[i].pos == v[j].pos){
          v[i].d = (v[i].d+1)%2; v[j].d = (v[j].d+1)%2;
        }
  }

  printf("%d %d\n", time, lastant);
}

int main(){

  scanf(" %d %d", &n, &l);
  while(n != 0 || l != 0){
    for(int i = 1; i <= n; i++){
      int a; char c;
      scanf(" %c %d", &c, &a);
      ant aux;
      if(c == 'L') aux.d = 0;
      else aux.d = 1;
      aux.id = i;
      aux.pos = a;
      aux.removed = false;
      v.push_back(aux);
    }
    solve();
    v.clear();

    scanf(" %d %d", &n, &l);
  }

  return 0;
}