列表

详情


NC221200. 小圆前辈的博弈

描述

小圆前辈今天将小焰同学叫来了,她们在玩一个有趣的游戏。小圆前辈有一个长度为n的字符串S,小焰有一个长度为m的字符串T,游戏规则是这样的:首先小圆前辈从S中取出一个子串s,然后小焰从T中取出一个子串t,若s与t相等的话,小圆前辈就输了,否则小焰输。小圆前辈想知道她有多少种必胜的取法,并向你求助,你能告诉她吗?

对于取出的任意的两个子串,只要在原串中位置不同我们就认为是不同的取法。

例如:abab中1~2的ab与3~4的ab虽然子串一样,但我们认为是不同的取法。


输入描述

第一行两个整数n,m分别表示S的长度与T的长度。

第二行一个字符串S。

第三行一个字符串T。

输出描述

一个整数表示答案。

示例1

输入:

3 4
aba
acac

输出:

4

说明:

小圆前辈可以取出的子串有:a,b,a,ab,ba,aba

小焰同学可以取出的子串有:a,c,a,c,ac,ca,ac,aca,cac,acac

其中当小圆前辈取出b,ab,ba,aba时,小焰同学无法取出与其相同的子串,故小圆前辈必胜。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Java 解法, 执行用时: 1103ms, 内存消耗: 185964K, 提交时间: 2021-05-26 15:57:42

import java.util.*;
public class Main{
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt(),k=sc.nextInt(),ans=0;
		String a=sc.next(),b=sc.next();
		int aa=a.length(),bb=b.length();
		for (int i=0;i<aa;i++)
			for (int j=i+1;j<=aa;j++) 
				if(b.indexOf(a.substring(i,j))==-1)ans++;
		System.out.println(ans);
	}
}

pypy3 解法, 执行用时: 135ms, 内存消耗: 25828K, 提交时间: 2022-03-24 16:07:54

n = int(input())
m = int(input())
# n, m = map(int, input().split())
s = input()
t = input()
ans = 0

for i in range(n):
    x = ''
    for j in range(i, n):
        x += s[j]
        if x not in t:
            ans += n - j
            break
print(ans)

Python3 解法, 执行用时: 54ms, 内存消耗: 4580K, 提交时间: 2022-03-24 17:34:57

n = int(input())
m = int(input())
s = input()
t = input()
cnt=0
for i in range(n):
    x = ''
    for j in range(i,n):
        x += s[j]
        if x not in t:
            cnt += n - j
            break
print(cnt)

上一题