首页 > 其他 > 详细

map我觉得非水题-hdu-4329

时间:2014-07-31 20:09:07      阅读:340      评论:0      收藏:0      [点我收藏+]

这个题目真是考验我的英语能力,我弄了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;//临时保存URL
int 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;
    }
}

    
  

 

map我觉得非水题-hdu-4329,布布扣,bubuko.com

map我觉得非水题-hdu-4329

原文:http://www.cnblogs.com/hhhhhhhhhhhhhhhhhhhhhhhhhhh/p/3881351.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!