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;
    }
}

map我觉得非水题-hdu-4329

时间: 2024-10-31 01:02:11

map我觉得非水题-hdu-4329的相关文章

水题/hdu 1012 u Calculate e

题意 求n=0~9时的sigma(1/n!) 分析 因为刚学c++ 所以对浮点操作还是很不熟练,正好来了这么一道题 Accepted Code 1 /* 2 PROBLEM:hdu 1012 3 AUTHER:Nicole Lam 4 MEMO:水题 5 */ 6 #include<iostream> 7 #include<iomanip> 8 using namespace std; 9 double a[10]; 10 int main() 11 { 12 cout<&l

水题/hdu 1004 Let the Balloon Rise

题意 给出n个字符串,输出出现次数最多的那个 分析 存下字符串后排序,再统计,输出 Accepted Code 1 /* 2 PROBLEM:hdu1004 3 AUTHER:Nicole Lam 4 MEMO:水题 5 */ 6 7 #include<iostream> 8 #include<cstring> 9 #include<string> 10 #include<algorithm> 11 using namespace std; 12 13 in

水题/hdu 1001 Sum Problem

题意 给出一个数n,求1+2+??+n=? 分析 注意多case Accepted Code 1 /* 2 PROBLEM:hdu1001 3 AUTHER:NicoleLam 4 MEMO:水题 5 */ 6 7 #include<cstdio> 8 9 int main() 10 { 11 int n; 12 while (scanf("%d",&n)!=EOF) 13 { 14 int s=0; 15 for (int i=1;i<=n;i++) s+=

水题/hdu 1000 A + B problem

题意 输入a,b,输出a+b: 分析 注意多case Accepted Code 1 /* 2 PROBLEM:hdu1000 3 AUTHER:NicoleLam 4 MEMO:水题 5 */ 6 7 #include<cstdio> 8 int main() 9 { 10 int a,b; 11 while (scanf("%d%d",&a,&b)!=EOF) printf("%d\n",a+b); 12 return 0; 13 }

水题~~~~HDU 4788

Description Yesterday your dear cousin Coach Pang gave you a new 100MB hard disk drive (HDD) as a gift because you will get married next year. But you turned on your computer and the operating system (OS) told you the HDD is about 95MB. The 5MB of sp

最短路水题 HDU 1874畅通工程续

Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. Input 本题目包含多组数据,请处理到文件结束. 每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目.城镇分别以0-N-1编号.

HDU 1520 Anniversary party 树DP水题

非常水的树DP,状态为当前为i,上级来没来 然后跑一遍记忆化搜索即可 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #include <cstdlib>

hdu 5210 delete 水题

Delete Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5210 Description wld有n个数(a1,a2,...,an),他希望进行k次删除一个数的操作,使得最后剩下的n−k个数中有最多的不同的数,保证1≤n≤100,0≤k<n,1≤ai≤n(对于任意1≤i≤n) Input 多组数据(最多100组)对于每组数据:第一行:一个数n表示数的个数接下来一行:

HDU 1862 EXCEL排序 (排序水题)

Problem Description Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. Input 测试输入包含若干测试用例.每个测试用例的第1行包含两个整数 N (<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号.以下有 N 行,每行包含一条学生纪录.每条学生纪录由学号(6位数字,同组测试中没有重复的学号).姓名(不超过8位且不包含空格的字符串).成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开.当读到 N=0 时,全部输入结