#include #include #include #include #include #include #include #include struct Date { int Y; int M; int D; Date(std::string& s) { std::stringstream ss; ss << s; char tmp; ss >> Y >> tmp >> M >> tmp >> D; } Date(int Y, int M, int D) : Y(Y), M(M), D(D) {} bool operator<(const Date& d) const { if (Y < d.Y) return true; if (Y > d.Y) return false; if (M < d.M) return true; if (M > d.M) return false; if (D < d.D) return true; return false; } }; struct Student { std::map scores; std::string name; Student(std::string& name) : name(name) {} Student(const Student& s) { scores = s.scores; name = s.name; } bool operator==(const std::string& n) { return n == name; } bool operator<(const Student& st) const { return name < st.name; } }; int main() { std::set studs; std::set dates; std::string name, date; int grade; while (std::cin >> name >> date >> grade) { std::set::iterator iter = studs.find(name); Date d(date); if (iter == studs.end()) { Student s(name); s.scores[d] = grade; studs.insert(s); } else { Student s(*iter); s.scores[d] = grade; studs.erase(iter); studs.insert(s); } dates.insert(d); } std::cout << '.' << "\t"; for (auto& date : dates) { std::cout << std::setfill('0') << std::setw(4) << date.Y << '/' << std::setw(2) << date.M << '/' << std::setw(2) << date.D << '\t'; } std::cout << std::endl; for (auto st : studs) { std::cout << st.name << '\t'; for (auto& date : dates) { if (st.scores.find(date) == st.scores.end()) { std::cout << '.' << '\t'; } else { std::cout << st.scores[date] << '\t'; } } std::cout << std::endl; } return 0; }