中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日
生活随笔
收集整理的這篇文章主要介紹了
中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:題目大意
本題通過給定三個數組S0,P,S,其中S0是1到2n的一個排列,P具有2n個整數,且滿足:
數組S是把數組S0中所有奇數元素全部刪除并將所有偶數元素除以2并按照原來的相對順序進行排列而得。
現在給定數組S和數組P,我們需要反求數組S0。
二:題目分析
我們通過對數組P的遞推式分析可知:當數組S0的元素是偶數時,這個元素所對應的Pi的值一定等于i.當數組S0的元素為奇數時,我們可以知道對應的Pi一定不等于i。那么我們可以先對數組P掃一遍,把存在Pi=i的元素全部填好,然后再對數組P重新掃描一遍,把所有奇數位置的元素通過如下公式求得并填好:
? ? ? ? ?
最后就是對數組進行輸出了。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; }?
四:總結
本題就是逆向思維的運用,以及對找到數組之間的規(guī)律的綜合體現。
?
轉載于:https://www.cnblogs.com/khbcsu/p/4280166.html
總結
以上是生活随笔為你收集整理的中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EasyPR 环境配置
- 下一篇: VS2017 CUDA编程学习12:CU