解いた問題

7/03/2012

SRM412 Div2 Medium

500

やるだけ



class BirthdayReminders {
public:
  vector <string> remind(vector <string> friendNames, vector <int> birthDates, int currentDate, vector <string> occasions, vector <int> days, int k)
  {
    vector< vector<int> > v;

    const int N = friendNames.size();
    const int M = occasions.size();

    for (int i = 0; i < N; ++i) {
      for (int j = 0; j < M; ++j) {
        int m = currentDate - birthDates[i];
        int n = m / days[j] + (bool)(m % days[j]);
        for (int loop = 100; loop--; ++n) {
          int D = birthDates[i] + n * days[j];
          vector<int> u;
          u.push_back(D);
          u.push_back(j);
          u.push_back(i);
          u.push_back(n);
          v.push_back(u);
        }
      }
    }

    sort(v.begin(), v.end());
    char buff[1000];
    vector<string> ret;
    for (int i = 0; i < k; ++i) {
      sprintf(buff, "%d. %s %s (%d)", v[i][0], friendNames[v[i][2]].c_str(), occasions[v[i][1]].c_str(), v[i][3]);
      ret.push_back(string(buff));
    }
    return ret;
  }
};