您的位置:首页 > 其它

UVA 1481 Genome Evolution(高效算法优化)

2016-10-14 19:36 260 查看
记录下第二个数组的位置,然后更新第一个数组的区间,然后更新第二个数组的区间,如果区间长度相等,那么就是有子集相等,此时ans++。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define ss(x) scanf("%d",&x)
const int maxn=3000+10;
int s[maxn],t[maxn],vis[maxn];
int n;
int main()
{
while(true)
{
int ans=0;
ss(n);if(n==0) break;
rep(i,1,n) ss(s[i]);
rep(i,1,n) {ss(t[i]);vis[t[i]]=i;}
rep(i,1,n){
int l=vis[s[i]],r=vis[s[i]],k=1;
rep(j,i+1,n){
l=min(l,vis[s[j]]);
r=max(r,vis[s[j]]);
k++;
if(r-l+1==k) ans++;
}
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: