Problem Statement for BirthdayReminders
素直に書いたら、タイムアウトで撃沈された。システムテストの3個目でも落とされる。
class BirthdayReminders {
public:
vector <string> remind(vector <string> friendNames, vector <int> birthDates, int currentDate, vector <string> occasions, vector <int> days, int k) {
vector <string> rem;
vector <int> times;
stringstream ss;
int fs = friendNames.size();
int os = occasions.size();
for(int l=0;l<fs*os;l++) times.push_back(0);
for(int i=1;i<1000001;++i){
for(int j=0;j<occasions.size();++j){
for(int m=0;m<friendNames.size();++m){
int n = m*os+j;
if(i-birthDates[m]>0 && (i-birthDates[m])%days[j] == 0) {
times[n]++;
if(i >= currentDate) {
ss << i << ". " << friendNames[m] << " " << occasions[j] << " (" << times[n] << ")";
rem.push_back(ss.str());
if(rem.size() == k) return rem;
ss.str("");
ss.clear();
}
}
}
}
}
return rem;
}
};
最初にテーブルを作っておいて最小の日を探しつつ更新していく。
教訓:安直にforをまわさない。