HDU5495求俩个1~n的数列按照相同的规则重排后的LCS
来源:互联网 发布:vs2005操作mysql 编辑:程序博客网 时间:2024/06/07 06:20
这题智商低,想了很久没有想到怎么做,其实想通了很简单,由于俩个数列都是1~n的排列,
所以在每个位置的a[i]和b[i]建一条边,然后通过样例可以很明显看出来,建边之后会形成n多个环,
而每个环视相互独立的,对于长度大于1的每个环都可以以牺牲一个值得代价取得最长公共子串。
总有那么些巧妙地题是我这种智商低的想不到的。
#include<cstdio>#include<cstring>#include<cstdlib>#include<cctype>#include<algorithm>#include<iostream>#include<set>#define LL long longusing namespace std;const int N=1e5+10;int a[N],b[N],c[N];bool bo[N];int main(){ int t; cin>>t; while(t--) { int n; cin>>n; memset(bo,0,sizeof(bo)); for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++) { scanf("%d",&b[i]); c[a[i]]=b[i]; } int ans=n; for(int i=1;i<=n;i++) { if(!bo[i]) { int x=i; if(c[x]!=x) ans--; while(!bo[x]) { bo[x]=1; x=c[x]; } } } cout<<ans<<endl; } return 0;}
0 0
- HDU5495求俩个1~n的数列按照相同的规则重排后的LCS
- 重排数列--是否存在排列,排列后数组的每两个相邻元素的乘积都是4的倍数
- CF 187A(从后取数的重排数列)
- HDU5495--LCS(置换群)
- 循环节 hdu5495 LCS
- 找出两个含有相同元素个数的递增数列中第n小的数
- 计算1/n!的数列之和
- 数据库按照指定的规则排序
- java按照规则进行字符串的填充
- 三角螺旋阵 方阵的主对角线之上称为“上三角”。 请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。
- 15、一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。
- 【2011】去掉数列中相同的数
- UVA10635 LCS 问题的 n*logn 解法
- 1061 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
- 从1到n的平方,按照从小到大,顺时针打印
- 按照字典序生成1--n的排列
- UICollectionView的重排功能
- 自定义重排的CollectionView
- Vim 自动补全插件 YouCompleteMe 安装与配置
- 基于python3,抓取韩寒博客文章
- Kd-Tree算法原理和开源实现代码 本文为转载
- 用imagebox控件实现多种视频播放功能,并且帧图片可供后续处理
- libcocos2dx.a 出错解决。
- HDU5495求俩个1~n的数列按照相同的规则重排后的LCS
- HDU 5492 Find a path(DP)
- 6.Python深入_内存管理
- [汇编语言]在CPU内部,两个寄存器之间通过什么方式进行读写?
- [汇编语言]sub命令得到的结果,在送入内存之前,是否保存在某个寄存器中
- 如何SPM配置
- Codeforces Round #323 A Asphalting Roads
- Codeforces Round #323 B Robot's Task
- C程序调用matlab (Win8 64 bit + VS 2013 + Matlab R2014a)