【問題描述】分析:看到題,首先想到的一定是搜尋,但是一看資料範圍,n<=10000那就一定不是搜尋了。所以還是從模擬入手找規律。小 w 潛入了外星人的基地刺探情報,遇到乙個二級密碼系統。一級密碼是乙個長度為
n 的 0-1 序列 b, 記為(b1 b2 ⋯ bn)。 將一級密碼的第一位放到最後,得到乙個新的序
列(b2 b3 ⋯ b1), 繼續做同樣的操作得到(b3 b4 ⋯ b2),如此反覆,總共可以得到
n 個序列,將這些序列按字典序排序後,字典序最小的即為二級密碼,輸入這個二級密
碼,就可以得到情報。
外星人將領將排序過後的 n 個字串按照字典序從小到大的順序逐行寫成了乙個 n 階
矩陣,而且小 w 恰好看到了這個矩陣,不難發現,這個矩陣的第一行就是二級密碼,所以
如果小 w 記住這個矩陣的第一行,就可以直接獲得情報。但是小 w 在出發前聽上司布置
任務時走神將「記住第一行」聽成了「記住最後一列」。所以小 w 現在只記得最後一列是
什麼,小 w 趕緊聯絡遠在地球的你,希望你能幫他由矩陣的最後一列得到矩陣的第一行。
【輸入格式】
共兩行,第一行乙個整數 n,第二行 n 個值為 0 或 1 的整數,表示矩陣的最後一列。
【輸出格式】
輸出檔案共一行,為矩陣的第一行。
【樣例】
5 1 1 0 0 0
0 0 1 0 1
【資料規模與約定】
對於 20%的測試資料n ≤ 20
對於 50%的測試資料 n≤ 1000
對於 100%的測試資料n ≤ 10000
【樣例解釋】
一級密碼為(0 1 0 0 1),因此得到 5 個序列為:
0 1 0 0 1
1 0 0 1 0
0 0 1 0 1
0 1 0 1 0
1 0 1 0 0
經過排序過後的矩陣為:
0 0 1 0 1
0 1 0 0 1
0 1 0 1 0
1 0 0 1 0
1 0 1 0 0
有兩個重要的規律,此處詳解:
設一級密碼為 b1,b2,b3.b4,b5,b6
則所有一級密碼為:
b1 b2 b3 b4 b5可以將樣例帶入b1,b2,b3,b4,b5b2 b3 b4 b5 b1
b3 b4 b5 b1 b2
b4 b5 b1 b2 b3
b5 b1 b2 b3 b4
排序可得矩陣:
b3 b4 b5 b1 b2現在就得到了這樣乙個矩陣,因為題設含義為字典序從小到大,所以不難發現第乙個規律:b1 b2 b3 b4 b5
b4 b5 b1 b2 b3
b2 b3 b4 b5 b1
b5 b1 b2 b3 b4
b3<=b4<=b5<=b1<=b2它的意思就是通過給定最後一列得出第一列有幾個0,則第一列前面全為0,後面全為1。
通過這種方法,樣例不難得出第一列為:
0然後,我們畫出第一列和最後一列:0 0 1 1
0 1觀察發現第一列的第乙個0對應最後一列第乙個0,第一列第二個0對應最後一列第二個0……1的規律也是如此。0 1
0 0
1 0
1 0
這裡用另一組資料給出證明,若輸入
6則可以得出第一列和最後一列:1 1 1 0 1 0
0 1按照如上結論第一列第一行的0對應最後一列第四行的0,第一列第二行的0對應最後一列第六行00 1
1 1
1 0
1 1
1 0
為什麼是第一行的0對應第四行而不是第六行的0呢?
因為每行已按照字典序從小到大排序,說明第一行中間四個數字一定小於第二行中間四個數字,第四行和第六行也是如此。所以小的對應小的,而不是小的對應大的。
找到這兩個規律,接下來就好辦了。
還是以上面樣例。因為求的陣列相當於第一行,所以甚至不需要開二維陣列,現在設第一行6個數:
0 a b c d 1則按照一次密碼變換之後為:
a b c d 1 0因為上面提到此處末尾的0對應第乙個0,所以這6個數的順序和第四行順序一致
故:a=1
因為此時為:
1 b c d 1 0且此時為第四行的1,因為第四行的1對應最後一列第二行的1
所以:
b c d 1 0 1順序與第二行一致,故b=0
以次類推。
至此,此題就可以解出來了。
**:
#include
using
namespace
std;
int n;
int hang[10001],lie_last[10001],lie_first[10001],a1[10001]= ,a0[10001]= ;
int ref[10001];
int num=0;
int main()
for(int i=1; i<=n; i++)
int re_0=1,re_1=1;
for(int i=1; i<=n; i++)
for(int i=1; i<=n; i++)
hang[1]=lie_first[1];
hang[n]=lie_last[1];
cout
<1]<<" ";
int k=1;
for(int i=2;icout
<" ";
k=ref[k];
}cout
0;}
NOIP提高組 20151029模擬
其實這套題目並不算太難,但是還是發揮不了100 水平。第一題直接線性篩法,求出質數,然後就可以判斷乙個數是否為質數了。這道題還可以用miller rabin去求,後者的速度較快,如果資料再大些,就要使用後者了。第二題,比賽時發現了,當n 7時,答案會每四個一迴圈,但是就沒有繼續往下想,其實想下去會想...
NOIP提高組模擬 Value
相信大家一看到這道題就想起最經典的揹包問題,於是毫無疑問就往dp方向想。於是我們設出狀態轉移方程,設f i j k 為我要拿i個物品,已經選了j個,現在第j個我選了k的最大價值,那麼f i j k max,其中l為第j 1次選擇的物品。但很快我們發現,你這樣做是不行的,因為我們還要解決順序問題,選擇...
NOIP提高組模擬 幻象
phantom是一位愛思考的哲 學家。最近phantom得到了森 妖精的真傳。在他練功的時候,每秒他的思緒中都有一定的概率浮現出奇 異的幻象,持續x秒的幻象將產生x 2 的幻象值。phantom練功發自真心,他想知道,在n秒內他期望產生的幻象值是多少。因為持續x秒的幻象將產生x2 的幻象值,所以設乙...