题目:大地的秘密
題目描述
題目背景
在你的幫助之下,三仙獸終于弄清楚了到北京的道路,于是他們收拾一下行裝,出發了。
第一站他們要經過被成為“米不亞亞亞亞爾”的神秘森林,由于有蓬絮這位走迷宮的高手打頭陣,前進的道路變平坦了很多。但當他們來到這片森林的核心地帶時,還是遇到了一點點小麻煩……
題目敘述
現在他們位于神秘森林的核心部位,面前有兩條主要的大道,不用說,一條通向光明,一條通向黑暗。大家當然想奔向光明,遠離黑暗,可是蓬絮研究了半個時辰也研究不出個所以然。
倒是細心的花楹發現了線索,她在地上搜尋時,發現了遺落在草叢里的一張紙,紙上如是寫道:
致想要尋找出口的人們:
這里必須你們真正了解大地的運行規律,才能破解難關。
現在,你們只需要拿這這張紙,大喊一聲:“哇呱呱呱呱呱呱呱呱呱呱~”,你們前方的地面上就會出現很多的木偶士兵,他們外貌各異。你們必須把他們排布成東邊一棵松樹上刻紋中寫出的陣列,正確的出口才會顯露出來。
正確的答案就在你們面前,只看你們能不能把握咯。
——米不亞亞亞亞爾之主:巴羅羅羅羅列吉
沒辦法,雖然這張破破爛爛發著臭氣的紙看上去不像真的,死馬當作活馬醫,三人還是照做了。沒想到咒語剛說完,前方“嗡~”的一聲起了巨大的煙霧。等到煙消云散,三獸定睛一看,地上果然出現了數不清的人偶。
他們開始相信這一張紙的真實性了,動作快的勇氣趕忙找到附近的一棵松樹。果然,上面也刻著數不請的人偶圖案。
現在的任務就是如何調整木偶的順序了。整個木偶群可以看成一列排布的,所有的 n 個木偶不盡相同,編號為 1-n。由于仙獸功力有限,每次施法只能把一個木偶移動到另兩個木偶之間(可以移到隊頭和隊尾)。
經過三個時辰的仔細研究,勇氣已經把所有的木偶都正確編號完畢(勇氣:累死俺也~她們兩個都不干事的……)。現在他需要你告訴他,要完成調整最少需要移動多少次木偶,這樣來給他個心里準備……
數據范圍
對于 60% 的數據,n <= 1000
對于 100% 的數據,n <= 100000
輸入格式
三行,第一行一個整數 n,表示有 n 個木偶。
第二行,n 個整數(1-n),表示初始時木偶的排布。
第三行,n 個整數(1-n),表示目標木偶的排布。
輸出格式
一行,一個整數,表示最少移動次數。
?
?
題解:————————————————————————————————————————
贊!這道題實在是太贊了!!!
很顯然,每一個人偶最多只需要移動一次便可到達正確位置。但是從樣例中可以看出,有一些人偶是不需要動的,那么最終的答案便是?n?減去不需要移動的人偶數。
這道題集LIS(最長不下降序列)與LCS(最長公共序列)于一身。也可以說吸收了LCS的思想,或者是LCS的變形應用。而且該題的數據范圍n<=100000使得LIS動態規劃O(n*n)的算法超時,所以這里用需要用到LIS(nlgn)的算法,這在前面我的博客上都有介紹的。
數組a[i]記錄的是初始時木偶的排布,令c[a[i]]=i,所以c[]是遞增的。b[i]記錄的是移動后木偶的排布。求c[b[i]]數列的最長不下降序列長度。
#include<iostream>
#include<cstring>
using namespace std;
int a[100001],b[100001],c[100001],f[100001],n,len=1;
int find(int x,int r){
??? int mid,l=1;
??? while(l<=r)
??? {
???? mid=(l+r)/2;
???? if(f[mid]==x) return mid;
???? if(f[mid]<x) l=mid+1;
???? if(f[mid]>x) r=mid-1;?????
?????????????? }
??? return l;
??? }
int main()
{
??? int i,j;
??? scanf("%d",&n);
???
??? for(i=1;i<=n;i++)
??? {scanf("%d",&a[i]);c[a[i]]=i;}
???
??? for(i=1;i<=n;i++)
??? scanf("%d",&b[i]);
??? memset(f,0,sizeof(f));
??? f[1]=c[b[1]];
??? for(i=2;i<=n;i++)
??? {
??? j=find(c[b[i]],len);
??? if(j>len) len=j;
??? f[j]=c[b[i]];
??? }
???
??? cout<<n-len<<endl;
??? system("pause");
??? return 0;
???
??? }
轉載于:https://www.cnblogs.com/noip/archive/2012/01/16/2324141.html
總結
- 上一篇: 查看端口占用情况:FPort和Moo0
- 下一篇: 通用权限管理系统组件 (GPM - Ge