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;
}
#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;
}
相关文章推荐
- 高效算法设计专项:UVa 10535
- 高效算法设计专项:UVa 10730
- 【高效算法设计——最大值最小问题】UVa 714 Coying Books
- 【高效算法设计——双向扫描】 UVa 1442 Cave
- 【高效算法设计——递归】 UVa 12627 Erratic Expansion
- 高效算法设计专项:UVa 10125
- 集训第四周(高效算法设计)B题 (二分查找优化题)
- 【高效算法设计——等价转换】UVa 11054
- 【高效算法设计】UVa120 Stack of Flapjacks
- UVA - 1619 Feel Good(高效算法:滑动窗口)
- 高效算法设计专项:UVa 10827
- UVA - 1354(指针结点的联合方法 || 高效算法复杂度未算出)
- 高效算法设计专项:UVa 10691
- 【高效算法设计——滑动窗口】UVa 11572 Unique Snowflakes
- ( 设计高效算法 ) 年龄排序 Age Sort Uva 11462
- 高效算法设计专项:UVa 11054
- 高效算法设计专项:UVa 11572
- uva 11374 最短路+记录路径 好题 dijkstra优先队列优化算法 邻接表法 可做模板 G++提交
- 【高效算法设计——二分法】UVa 1607 Gates
- 1619 - Feel Good(高效算法-利用数据结构优化-优先队列)