zoukankan      html  css  js  c++  java
  • 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;//临时保存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;
        }
    }
    
        
      
  • 相关阅读:
    手机获取ip地址
    CoreGraphics 自定义button
    抽奖及背景图片的透明度设置时连着转盘图片也跟着虚幻解决方法
    多个UIcollctionView,返回个数不对错误
    collectionview item 间距
    判断键盘的高度
    orcle 11g 的安装图解
    clone()详解
    isAssignableFrom ,isInstance , Instanceof() 区别
    三元表达式
  • 原文地址:https://www.cnblogs.com/hhhhhhhhhhhhhhhhhhhhhhhhhhh/p/3881351.html
Copyright © 2011-2022 走看看