1 条题解

  • 0
    @ 2017-08-23 14:21:09

    感觉数据精度有问题 在不断测试削弱了精度之后终于凑对了。。

    #include <cstdio>
    #include <iostream>
    #include <string.h>
    #include <queue>
    #include <vector>
    #include <map>
    
    using namespace std;
    #define clr(x) memset(x,0,sizeof(x))
    #define eps 1e-10
    #define ll long long
    const int maxsize=26;
    const int maxn=40*100000;
    
    int ch[maxn][maxsize];
    ll val[maxn],sz;
    int cnt,n;
    char s1[5555];
    char st[5555];
    struct Trie
    {
        int idx(char s)
        {
            return s-'a';
        }
        void init()
        {
            sz=1;
            clr(ch);
            clr(val);
        }
        void insert(char* s)
        {
            int u=0;
            int len=strlen(s);
            for (int i=0; i<len; i++)
            {
                int c=idx(s[i]);
                if (!ch[u][c])
                {
                    clr(ch[sz]);
                    ch[u][c] = sz;
                    val[sz++]=0;
                }
                u=ch[u][c];
                val[u]++;
            }
        }
        double get(char* s)
        {
            int u=0;
            double res=0;
            int len=strlen(s);
            for (int i=0; i<len; i++)
            {
                int c=idx(s[i]);
                u=ch[u][c];
                if (u==0) return res;
                res += val[u] *  1.0 * ((i+1) * 1.0 / len);
            }
            return res;
        }
    
    } tr;
    
    int main()
    {
        int n,q;
        scanf("%d",&n);
        scanf("%s",st);
        tr.init();
        for (int i=0; i<n; i++)
        {
            scanf("%s",s1);
            tr.insert(s1);
        }
    
        printf("%.2f\n",tr.get(st) );
        scanf("%d",&q);
        for (int i=1;i<=q;i++)
        {
            scanf("%s",st);
            printf("%.2f\n", tr.get(st));
        }
    
        return 0;
    }
    
    
  • 1

信息

难度
8
分类
(无)
标签
(无)
递交数
188
已通过
20
通过率
11%
上传者