日々精進

aikoと旅行とプログラミング

【AOJ 2242】Era Name

問題

Era Name | Aizu Online Judge

方針

  • EraBasedYearとWesternYearが入力し, それらをs(start), e(end)という変数に代入.
  • queryが (EraBasedYear_i - WesternYear_i, WesternYear_i ]にはいってるとき,  {EraName_i}が答え.
  • 当てはまらない時はUnknownとなる.

コード

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

#define rep(i,n) REP(i,0,n)
#define REP(i,a,n) for(int i = a ; i < (int)n ; i++)

struct YEAR{
  string _en;
  int s, e;

  YEAR(string en, int eby, int wy){
    _en = en;
    s = wy - eby;
    e = wy;
  }

  bool operator < (const YEAR& another) const {
    return s < another.s;
  }
};

vector<YEAR> v;

string getEraBasedYear(int query){
  rep(i, v.size()){
    if(v[i].s < query && query <= v[i].e){
      return (v[i]._en + " " + to_string(query-v[i].s));
    }
  }
  return "Unknown";
}

signed main(){
  int n, q, eby, wy, query;
  string en;

  while(cin >> n >> q, n||q){
    v.clear();
    rep(i,n){
      cin >> en >> eby >> wy;
      v.push_back(YEAR(en, eby, wy));
    }
    
    sort(v.begin(), v.end());

    rep(i,q){
      cin >> query;
      cout << getEraBasedYear(query) << endl;
    }
  }
}

残ってるAOJ−ICPCの200問題が全部英語なのでつらい. 誤読祭り.