首页 > 代码库 > map我觉得非水题-hdu-4329

map我觉得非水题-hdu-4329

这个题目真是考验我的英语能力,我弄了2小时才弄懂题目的意思,后来打代码,根据别人的思维打的,因为一开始看不懂题目,就死抠,查了好久没一个负责的,题解一句话:题目怎么说我就怎么打.这题解未免太机智了,我要知道题目意思,还看你作甚。写了好多注释,有一点还是很模糊,getchar()我觉得没啥用,但是不打它就过不了。还有那个排序的东西,为啥需要它呢,我也不是很明了,学长啊,求大腿,实在不行,小腿我也不嫌弃。帮我理解一下题目了。

# include <iostream># include <cstring># include <cstdio># include <cstdlib># include <map># include <iomanip># include <string>using namespace std;struct node{   string str1;//为了保存关键搜索,如:Banana   string str2;//保存每个搜索后面的URL   bool operator<(const node &a) const//排序操作,对于搜索内容相同的排它的URL顺序,否则排搜索内容   {       if(a.str1==str1)       {           return a.str2>str2;       }       else           return a.str1>str1;   }};char ch[10010];//存读入的一行字符串char *word;//临时存查询词char *p;//临时保存URLint R[105];//保存每个搜索词后URL的个数int main(){    int t,T,i,num,n,k;    double Pr,sum;    node temp;//作用很大。    cin>>T;    getchar();    for(t=1;t<=T;t++)    {        cin>>n;        getchar();        map<node,int> mp;//申明一个map        map<node,int>::iterator it;//map的迭代器        for(i=1;i<=n;i++)        {            cin.getline(ch,10010);//读入一行            word=strtok(ch," ");//保存第一个分隔符””前的单词            temp.str1=word;//将搜索词保存在节点str1中            k=0;            p=strtok(NULL," ");//读入此搜索词后的第一个URL            while(p)//循环读入,以“”分隔符截取            {                temp.str2=p;//保存在此str2中                k++;//计算个数                mp[temp]=k;                p=strtok(NULL," ");            }            R[i]=k;//记录每个搜索词相关的URL数目        }        sum=0;        for(i=1;i<=n;i++)        {            cin.getline(ch,10010);//继续读下面n行            word=strtok(ch," ");            temp.str1=word;            k=0;            Pr=0;            num=0;            p=strtok(NULL," ");            while(p)            {                k++;//记录现在共有的URL数目                temp.str2=p;                it=mp.find(temp);                if(it!=mp.end())                {                    num++;//记录相同的个数                    Pr=Pr+1.0*num/k;//计算pr                    mp.erase(it);                }                p=strtok(NULL," ");            }            sum=sum+Pr/R[i];        }        cout<<"Case #"<<t<<": "<<fixed<<setprecision(6)<<sum/n<<endl;    }}