1 条题解
-
0hzk123 LV 7 @ 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%
- 上传者