NC229552. 爱书人的资料查询
描述
输入描述
数据的第一行含有一个整数T(), 表示数据的组数。
对于每一组数据:
第一行含有一个整数n(),代表小铃选出的单词总数。
接下来n行,每行一个长度为w()的、仅由小写字母组成的字符串,代表小铃选出的n个单词。
接下来一个长度为s()的、仅由小写字母组成的字符串,代表资料的内容。
输出描述
每组测试数据输出一个数,表示小铃选出的那些单词在资料里总共出现了多少次。
示例1
输入:
2 2 neu neuoj neuisestablishedin1923neuojis2013 1 aa aaa
输出:
3 2
C 解法, 执行用时: 4ms, 内存消耗: 288K, 提交时间: 2021-11-11 23:53:30
#include<stdio.h> #include<string.h> int seek(char* s,char* s1) { char* p=s1,*q; int i=0; while(*p!='\0'){ q=strstr(p,s); if(q!=NULL){ i++; p=q+1; } else break; } return i; } int main() { int T,n,sum; scanf("%d",&T); while(T--){ sum=0; scanf("%d",&n); char s[n][12]; char s1[10000]; getchar(); for(int i=0;i<n;i++){ gets(s[i]);} gets(s1); for(int i=0;i<n;i++){ sum+=seek(s[i],s1);} printf("%d\n",sum); } }
C++(g++ 7.5.0) 解法, 执行用时: 16ms, 内存消耗: 680K, 提交时间: 2022-10-13 17:53:09
#include<iostream> using namespace std; int T; int main() { cin >> T; while (T-- != 0) { int n; cin >> n; string a[10000]; for (int i = 0; i <n; i++) { cin >> a[i]; } string s; cin >> s; int sum = 0; for (int i = 0; i < s.size(); i++) { for (int j = 0; j < n; j++) { if (s.substr(i, a[j].size()) == a[j]) { sum++; } } } cout << sum << endl; } }
C++ 解法, 执行用时: 11ms, 内存消耗: 452K, 提交时间: 2021-10-22 19:21:14
#include<bits/stdc++.h> using namespace std; int main(){ long long t; cin>>t; while(t--){ int n; cin>>n; string a[1000]; for(int i=0;i<n;i++) cin>>a[i]; string s; cin>>s;int sum=0; for(int i=0;i<s.size();i++){ for(int j=0;j<n;j++) { if(s.substr(i,a[j].size())==a[j]) sum++; } }cout<<sum<<endl; } }
Python3 解法, 执行用时: 274ms, 内存消耗: 7080K, 提交时间: 2021-10-22 19:16:31
n=int(input()) for i in range(n): m=int(input()) l=[] for j in range(m): a=input() l.append(a) z=0 c=input() for k in l: b=len(k) for p in range(len(c)): if c[p:p+b]==k: z+=1 print(z)