中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日
生活随笔
收集整理的這篇文章主要介紹了
中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一:題目大意
本題通過給定三個數(shù)組S0,P,S,其中S0是1到2n的一個排列,P具有2n個整數(shù),且滿足:
數(shù)組S是把數(shù)組S0中所有奇數(shù)元素全部刪除并將所有偶數(shù)元素除以2并按照原來的相對順序進行排列而得。
現(xiàn)在給定數(shù)組S和數(shù)組P,我們需要反求數(shù)組S0。
二:題目分析
我們通過對數(shù)組P的遞推式分析可知:當(dāng)數(shù)組S0的元素是偶數(shù)時,這個元素所對應(yīng)的Pi的值一定等于i.當(dāng)數(shù)組S0的元素為奇數(shù)時,我們可以知道對應(yīng)的Pi一定不等于i。那么我們可以先對數(shù)組P掃一遍,把存在Pi=i的元素全部填好,然后再對數(shù)組P重新掃描一遍,把所有奇數(shù)位置的元素通過如下公式求得并填好:
? ? ? ? ?
最后就是對數(shù)組進行輸出了。over~
三:AC代碼
?
#include<iostream> using namespace std; int ans[1<<14],s[1<<14],p[1<<14]; int main() {int n;while(cin>>n){for(int i=0;i<n;i++)cin>>p[i];for(int i=0;i<n/2;i++)cin>>s[i];int k=0;for(int i=0;i<n;i++){if(p[i]==i+1){ans[i]=s[k++]*2;}}for(int i=0;i<n;i++){if(p[i]!=i+1){ans[i]=ans[p[i]-1]-1;}}int i;for( i=0;i<n-1;i++)cout<<ans[i]<<' ';cout<<ans[i]<<endl;}return 0; }?
四:總結(jié)
本題就是逆向思維的運用,以及對找到數(shù)組之間的規(guī)律的綜合體現(xiàn)。
?
轉(zhuǎn)載于:https://www.cnblogs.com/khbcsu/p/4280166.html
總結(jié)
以上是生活随笔為你收集整理的中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EasyPR 环境配置
- 下一篇: 这就是搜索引擎--读书笔记五--索引的建