列表

详情


NC229552. 爱书人的资料查询

描述

本居小铃从她的朋友稗田阿求那里听到了一个有趣的消息:外界一个叫做“辽宁省”的地方正在举办省赛。
小铃对这个名叫“辽宁省”的地方充满了好奇。
小铃想要进一步了解辽宁省,于是她找来了许多外界的资料。
为了判断哪些资料和辽宁省有关,她想出了一种判断资料相关度的方法。
首先,小铃先选出n个单词,认为资料的相关度只与这n个单词的出现次数有关。
然后,小铃在资料中寻找这些单词,并记录它们出现的次数,出现的次数越多,小铃就认为这些资料与东北大学越相关。
现在,小铃已经选出了这n个单词,正准备开始读资料,稗田阿求却来找她借书了。你能帮助小铃完成资料的阅读,并告诉小铃资料中小铃选定的单词出现了多少次吗?

输入描述

数据的第一行含有一个整数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)

上一题