日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

题目:大地的秘密

發布時間:2024/10/8 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 题目:大地的秘密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

題目背景
在你的幫助之下,三仙獸終于弄清楚了到北京的道路,于是他們收拾一下行裝,出發了。

第一站他們要經過被成為“米不亞亞亞亞爾”的神秘森林,由于有蓬絮這位走迷宮的高手打頭陣,前進的道路變平坦了很多。但當他們來到這片森林的核心地帶時,還是遇到了一點點小麻煩……

題目敘述
現在他們位于神秘森林的核心部位,面前有兩條主要的大道,不用說,一條通向光明,一條通向黑暗。大家當然想奔向光明,遠離黑暗,可是蓬絮研究了半個時辰也研究不出個所以然。

倒是細心的花楹發現了線索,她在地上搜尋時,發現了遺落在草叢里的一張紙,紙上如是寫道:

致想要尋找出口的人們:
  這里必須你們真正了解大地的運行規律,才能破解難關。
  現在,你們只需要拿這這張紙,大喊一聲:“哇呱呱呱呱呱呱呱呱呱呱~”,你們前方的地面上就會出現很多的木偶士兵,他們外貌各異。你們必須把他們排布成東邊一棵松樹上刻紋中寫出的陣列,正確的出口才會顯露出來。
  正確的答案就在你們面前,只看你們能不能把握咯。

      ——米不亞亞亞亞爾之主:巴羅羅羅羅列吉

沒辦法,雖然這張破破爛爛發著臭氣的紙看上去不像真的,死馬當作活馬醫,三人還是照做了。沒想到咒語剛說完,前方“嗡~”的一聲起了巨大的煙霧。等到煙消云散,三獸定睛一看,地上果然出現了數不清的人偶。

他們開始相信這一張紙的真實性了,動作快的勇氣趕忙找到附近的一棵松樹。果然,上面也刻著數不請的人偶圖案。

現在的任務就是如何調整木偶的順序了。整個木偶群可以看成一列排布的,所有的 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

總結

以上是生活随笔為你收集整理的题目:大地的秘密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。