乙個n*n矩陣(加密矩陣) a
乙個英文本串s
記 a=0,b=1,c=2…z=25
先將s轉成數字表示形式.
分組,比如s得到的序列為 x1,x2,x3,x4,x5,x6 n=2,那麼要分成每列兩個元素的矩陣即:
x1 x3 x5
x2 x4 x6
加密過程: 記上述的矩陣為m,得到的密文矩陣為c,則轉化過程為:
(am)%26=c(注意是m左乘乙個a)
解密過程:
m=(a-1 c)%26
一般做題過程中n不會太高.
嘗試n=2 猜測wznqca=utflag(前面的題目有說過類似對應,所以猜測這裡還是這樣)
解對應方程
s=
'wznqcaduqopfkqnwofdbzgeu'
flag_pre=
'utflag'
defgetit
(a1,b1,c1,a2,b2,c2,a3,b3,c3)
:for i in
range(26
):for j in
range(26
):if(a1 * i + b1 * j)%26
== c1 and
(a2 * i + b2 * j)%26
== c2 and
(a3 * i+b3*j)%26
== c3:
return
(i,j)
x1=getit(22,
25,20,
13,16,
5,2,
0,0)
x2=getit(22,
25,19,
13,16,
11,2,
0,6)
import string
flag=
''for i in
range(0
,len
(s),2)
: flag+=string.ascii_letters[
(x1[0]
*string.ascii_letters.index(s[i]
)+x1[1]
*string.ascii_letters.index(s[i+1]
))%26
] flag+=string.ascii_letters[
(x2[0]
*string.ascii_letters.index(s[i]
)+x2[1]
*string.ascii_letters.index(s[i+1]
))%26
]print
(flag)
#utflagdngeruscphertextqq
得到的不是最終答案,需要把原來的 『_』 ','大小寫等補回去. 2020五校聯盟H 虛假的防AK
原題是cfdiv1的一道b題,虛假2000分,其實只是個單調棧板子。題意 先求在乙個任意連續區間裡的最大值和次大值,求二者異或值。然後最終輸出所有異或值的最大值。思路 在任意區間裡找到第乙個比該位置數大的數,便是乙個區間的最大值和次大值了,然後正序逆序各跑一遍,不然會有疏漏,最終單調棧維護o n 解...
2020牛客多校第五場H
乙個數轉為二進位制後,最多有log位,所以減小後的個數最多只有log位,加上二分,複雜度為平方級的,主席樹也是log級的,所以總複雜度為 nlog2n mlogn 可能常數偏大 ac include include include include include include include de...
2020牛客多校第七場H
題目鏈結 任何 1,k 是有效答案。如果 n,k 是有效答案,那麼 n k,k 和 n k,k 都是有效答案。給出t組,n和k 範圍1 1e12 求出 n,k 在n n,k k範圍內的有效個數。在k不變的情況下,n的取值範圍只可能是k的倍數,或者k的倍數 1,可以o 1 算出當前k對應的答案個數。即...