HDU 4329 MAP(stringstream的用法)

  这个题目有点绕,但是按着他的意思写不难模拟出来。本来是一场学弟们的训练赛,我这个学长在赛场上却WA了四次都没过,三条黑线就一直在我的脑袋上挂着。。。

  赛后开始找原因,后来发现题目看错了,1/R中的R是指原先URL的个数。

  改过来发现还是过不了,想到了自己的输入处理可能是有问题的,既然自己模拟容易出错,那就使用了stringstream,自动提取单词,成功AC。

  意外的发现stringstream的功能十分强大,但是因为速度比较慢,用处比较少,所以也不怎么用,这个哥们写的不错,感兴趣可以去看看哦。

  具体注释在代码里~

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<sstream>
using namespace std;
#define N 110
#define M 10005
int rel[N];
char a[M];
map<string,int>mp[N];
void Init(int k)
{
    istringstream str(a);///istringstream是一个类,str为它的一个对象
    ///这里使用构造函数接受一个字符串
    string tmp;
    int tot = 0;
    str >> tmp; ///提取一个单词,空格用于区分单词,不可能被提取到单词中
    ///其实如果自己模拟出错,应该就是把空格提到了单词中
    mp[k].clear();
    while(str >> tmp){///怎么样,是不是很短,很方便呢~
        tot++;
        mp[k][tmp] = 1;
    }
    rel[k] = tot;
}
double Get_AveP(int k)
{
    istringstream str(a);
    string tmp;
    int i = 0,R = 0;
    double res = 0;
    str >> tmp;
    while(str >> tmp){
        ++i;
        if(mp[k][tmp] == 1)
        {
            R++;
            res += R*1.0/i;
        }
    }
    return res/rel[k];
}
int main()
{
//    freopen("G.in.cpp","r",stdin);
    int t,n,ca=0;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        getchar();
        for(int i = 1; i <= n; i++)
        {
            gets(a);
            Init(i);
        }
        double MAP = 0.0;
        for(int i = 1; i <= n; i++)
        {
            gets(a);
            MAP += Get_AveP(i);
        }
        MAP /= n;
        printf("Case #%d: %.6lf\n",++ca,MAP);
    }
    return 0;
}
时间: 2024-10-21 21:06:15

HDU 4329 MAP(stringstream的用法)的相关文章

hdu 4941 stl的map&lt;node,int&gt;用法

#include<iostream> #include<cstdio> #include<cstring> #include<map> using namespace std; typedef struct node{ int x,y; bool operator<(const node &b)const { if(x==b.x) return y<b.y; else return x<b.x; } }node; int main(

HDU 4287 &lt;map&gt;的使用

对于这道题我主要要讲得是STL中map的简单使用. 先说说map的用处. map就是从键(key)到值(value)的映射.因为重载了[]运算符,map像数组的"高级版",例如可以用一个map<string,int>month_name来表示"月份名字到月份编号"的映射,然后用month_name["July"] = 7这样的方式来赋值. 它的意思就是map<string,int>month_name表示[ ] 里面代表的

hdu 1247 map的使用

http://acm.hdu.edu.cn/showproblem.php?pid=1247 Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7760    Accepted Submission(s): 2814 Problem Description A hat’s word is a word in the

hdu 4941 map的应用+离散

1 #include<iostream> 2 #include<cstdio> 3 #include<map> 4 #include<algorithm> 5 using namespace std; 6 7 int main() 8 { 9 int T,n,m,k,a,b,c,q,cas=1; 10 scanf("%d",&T); 11 while(T--) 12 { 13 map<int,map<int,int&g

HDU 4921 Map DFS+状态压缩+乘法计数

算最多十条链,能截取某前缀段,每种方案都可以算出一个权值,每种方案的概率都是总数分之一,问最后能构成的所有可能方案数. 对计数原理不太敏感,知道是DFS先把链求出来,但是想怎么统计方案的时候想了好久,其实因为只能取某个链的前缀,所以直接取链长加+1 然后相乘即可,当然因为会出现都是空的那种情况,要去掉,全部乘完之后,要-1 然后就是算权值了,权值等于当前加进来的点的总和 以及 等级相同的点的加成,并不是特别好算,这时候考虑每个状态下的点对全局的贡献,对,就是这个思想,用状态压缩来表示状态,然后这

HDU 1075 map or 字典树

What Are You Talking About Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/204800 K (Java/Others)Total Submission(s): 12773    Accepted Submission(s): 4069 Problem Description Ignatius is so lucky that he met a Martian yesterday. But

HDU 4921 Map

题意: 给n个节点  他们形成了最多10条链  每条最多1000的长度  每个节点有个val  你可以选择任意位置截断链  断点前的所有节点被你获得  通过题中计算公式得出你的val  问  通过随机截断  获得val的期望是多少 思路: 期望=所有方案val的和/方案数 这里明显有分层的现象  而且每层最多10个元素  因此想到状压  那么我们只要逐层统计  每层计算一下能对"所有方案val的和"产生多少贡献即可  方案数可以直接算出来  计算方法如下 对于方案数  它就等于 (am

map的详细用法 (转

[cpp] view plaincopy map的详细用法: map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能 力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严 格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 下面举例说明什么是一对

GO的MAP字典简单用法示例

package main import "fmt" type PersonInfo struct { ID string Name string Address string } func main() { var personDB map[string]PersonInfo personDB = make(map[string]PersonInfo) personDB["12345"] = PersonInfo{"12345", "T