JOI2006模擬試験2 問題3@C++(51)
mapとかstringとかoperatorのoverload使うあたりあまり好きじゃないがこのアプローチが妥当
#include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <string> #include <map> using namespace std; class ltstr { public: bool operator()(const string& s1, const string& s2) const { if(s1.size()==s2.size()) return (s1<s2); return s1.size()<s2.size(); } }; int main(int argc,char* argv[]) { map<string,int,ltstr> name_map; int n; scanf("%d\n",&n); for(int i=0;i<n;i++) { char name[6]; int num; scanf("%s %d\n",name,&num); string sname=name; name_map[sname]+=num; } for(map<string,int,ltstr>::iterator i=name_map.begin();i!=name_map.end();++i) { printf("%s %d\n",i->first.c_str(),i->second); } return 0; }