読者です 読者をやめる 読者になる 読者になる

AOJ 1063 Watchin' TVA

AOJ C/C++ Simulation

問題

Watchin' TVA

解法

実装するだけ。虫が入らないように丁寧に書くことが必要。

心臓に悪いコード

int N;

int tominutes(int w, int s){
  int h = s/100;
  int m = s%100;
  if(h >= 24){
    h -= 24;
    w++;
  }
  return h*60+m+w*60*24;
}

int main(){
  while(scanf("%d", &N) && N){
    map<string, int>fm;
    vi fv, tv;
    int weekday, start;
    char name[64];
    rep(i, N){
      scanf("%s%d%d", name, &weekday, &start);
      int t = tominutes(weekday, start);
      fm[string(name)] = t;
      tv.PB(t);
    }

    int P;
    scanf("%d", &P);
    rep(i, P){
      scanf("%s", name);
      fv.PB(fm[string(name)]);
    }
    int flag = 0;
    sort(fv.begin(), fv.end());
    REP(i, 1, fv.size()){
      if(fv[i] - fv[i-1] < 30) flag = 1;
    }


    sort(tv.begin(), tv.end());
    rep(i, tv.size()) rep(j, fv.size()){
      if(abs(tv[i]-fv[j]) < 30){
    tv.erase(tv.begin()+i);
    i--;
    break;
      }
    }

    int res = tv.size();
    int time = 0;
    rep(i, tv.size()){
      if(tv[i] - time < 30){
    res--;
      }else{
    time = tv[i];
      }
    }

    printf("%d\n", flag?-1:P+res);

  }
  return 0;
}