ZOJ 3309 Search New Posts(stl map)

来源:互联网 发布:付辛博 井柏然 知乎 编辑:程序博客网 时间:2024/05/16 04:05

用的stl的map,排序主要靠key.

#include <iostream>#include <cstdio>#include <memory.h>#include <map>#include <string>using namespace std;map<string,int>sToNum;struct state{string name;int v;bool operator<(const state &rhs)const{return v>rhs.v||(v==rhs.v&&name<rhs.name);}};map<state,int>list;int opn;char buf1[20],buf2[80];int main(){while (scanf("%d",&opn)==1){sToNum.clear();list.clear();int maxv=1,id=1;while (opn--){scanf("%s",buf1);if(!strcmp(buf1,"new")){scanf("%s",buf2);sToNum[string(buf2)]=maxv++;state t;t.name=buf2;t.v=maxv-1;list[t]=1;}else if(!strcmp(buf1,"reply")){scanf("%s",buf2);state t;t.v=sToNum[buf2];t.name=buf2;map<state,int>::iterator it=list.find(t);t=it->first;list.erase(it);t.v=maxv++;sToNum[buf2]=t.v;list[t]=1;}else if(!strcmp(buf1,"tag")){scanf("%s",buf2);state t;t.v=sToNum[buf2];t.name=buf2;map<state,int>::iterator it=list.find(t);t=it->first;list.erase(it);t.v=0;sToNum[buf2]=0;list[t]=1;}else{map<state,int>::iterator it=list.begin();for (int i=0;i<100&&it!=list.end()&&it->first.v;++i,++it){printf("%s\n",it->first.name.c_str());}printf("###\n");}}printf("\n");}return 0;}


原创粉丝点击