LA5052

来源:互联网 发布:海绵软件qq改保改密 编辑:程序博客网 时间:2024/06/15 06:18

题目大意:
给你两串数字,求出有多少个连续序列可以构成a的子集也可以构成b的子集。

思路:
由于是连续的序列 所以只要求出a串中的起点和终点,然后b串的这两个点的距离如果和a的是一样的那么就满足条件。

代码:

#include <iostream>using namespace std;#include <cstring>#include <stdio.h>int n;const int MAXN = 3010;int a[MAXN],b[MAXN];int main() {    int l,r;    int pos;    int res;    while(scanf("%d",&n) && n) {        res = 0;        for(int i = 0; i < n ; i++)            scanf("%d",&a[i]);        for(int i = 0; i < n; i++) {            int temp;            scanf("%d",&temp);            b[temp] = i;        }        for(int i = 0; i < n; i++) {            l = r = b[a[i]];            for(int j = i + 1; j < n; j++) {                pos = b[a[j]];                l = min(pos,l);                r = max(pos,r);                if(j - i == r - l)                    res++;            }        }        printf("%d\n",res);    }    return 0;}
0 0
原创粉丝点击