POJ 1026 Cipher(置換群)迴圈節

2021-07-17 05:00:57 字數 1217 閱讀 3591

bod 和 alice 計畫使用一種全新的編碼方案,令人驚訝的是這不是乙個公開的公匙密碼,但是他們的編碼基於密匙,在

philadelphia on february 16th他們的會議中選擇了密匙,他們選擇的密匙是乙個兩兩不等的整數序列,a1.....an,大於0並且小於等於n,編碼基於一下原則。

下面的資訊是關鍵,這樣關鍵的人物資訊和數字相對齊,乙個字元在i位置,編碼的時候把他放在ai,ai就是相應數字位置的關鍵,並且他們以同樣的編碼資訊進行編碼,這個過程重複k次,在k次以後他們交換彼此的編碼。

這段資訊的長度小於或者等於n,如果小於n,那麼就在資訊的後面能新增空格使它等於n,

寫乙個程式完成這個編碼

本題先開始給了n個數,代表編碼的方案,例如

sample input

10

4 5 3 7 2 8 1 6 10 9

1 hello bob

1995 cerc

00

sample output

bolheol  b

c rce

給出的4 5 3 7 2 8 1 6 10 9
表示:
第乙個位置的字元經過一次置換後會出現在第4位置, 第二位置的編號會到第五位置.....
所以可以得到所有的置換群為(1,4,7)(2,5)(3)(6,8)(9,10) 這是經過0次變換的結果。
經過k次變換只需要單獨的在每個群裡進行移動就行了,所以,求出置換群後進行下標取模就行了。
#include#include#include#include#define ll long long

#define inf 0x3f3f3f3f

#define bug puts("************")

using namespace std;

const int n=300;

int index[n];

int vis[n];

int num[n]; ///置換群的大小

int arr[n][n]; ///記錄每個置換群的內容

char s[n];

char str[n];

int main()

int cnt=0; ///置換群的總個數

for(int i=1;i<=n;i++)

cnt++;}}

// for(int i=0;i

POJ 1026 Cipher 置換群的冪

題目大意 給出乙個置換群,再給出數個字串,每個字串需要輸出執行 k 次置換群後的答案 題目分析 置換群的 k 次冪,直接寫就行了 include include include include include include include include include include inclu...

poj 1026 加密問題

題目大意是,給定一串密匙,求原始碼經過密匙加密k次後的內容。加密的規則是 原始碼第i個字母調換到密匙中ai指定的位置。同時,原始碼長度小於等於密匙長度,當原始碼長度小於密匙長度時,在原始碼後使用空格填充保證二者長度相等。最開始使用的直接模擬加密過程的方法,會超時。明顯要考慮加密過程中加密的內容週期問...

置換開方 POJ3128

題意 給乙個置換,判斷是否是另乙個置換的平方。乙個置換可以表示成迴圈的乘積。對於長度為偶數的迴圈,它的平方會 成兩個長度各位之前一半的迴圈。對於長度為奇數的迴圈,它的平方不會 所以對於當前置換中長度為偶數的迴圈,一定是以前的置換 出來的,判斷每個長度為偶數的迴圈的個數是否為偶數個即可。對於長度為奇數...