竹園論壇

標題: 64 - E.風聲 [打印本頁]

作者: Sylveon    時間: 2014-5-28 17:05
標題: 64 - E.風聲
原題:http://toj.twbbs.org/oj/pro/64/
AC:http://toj.twbbs.org/oj/chal/2151/

[youtube]doBxbVJctgM[/youtube]


解題方法:
關鍵概念:XOR的運算。

考慮XOR的運算規則:
交換律:[tex]A%20%5Coplus%20B%20%3D%20B%20%5Coplus%20A[/tex]
消除律:[tex]A%20%5Coplus%20A%20%3D%200[/tex]
衡等律:[tex]A%20%5Coplus%200%20%3D%20A[/tex]

已知:TA、TAB、TB。解法如下:
1.對TA,TAB作XOR,可以得B,因為消去律,T跟A都被消除為0,而B因衡等律保留下來,此動作又稱為互反
2.將求得的B,與TB再做XOR,可以得原文T,輸出即是答案。

解題狀況:
許多人對於16進位與char的轉換很有困難,許多人解出的答案如下:

ABA2C56FA741A66EB6DCB04AA4DFB750C1C2ACC3ADABA641A8A3B4C1ABDDA641ACDBB37B

苦主 EX:
http://toj.twbbs.org/oj/chal/2550/
http://toj.twbbs.org/oj/chal/2544/

其實只要你把這一個16進放入char陣列,輸出就會得到答案。或許留社就差這一步,真是可惜!

@把16進位放到char陣列
  • #include<cstdio>
  • using namespace std;
  • int main()
  • {
  •     char op[]={     0xAB,0xA2//哈
  •                 ,0xC5,0x6F//囉
  •                 ,0xA7,0x41//你
  •                 ,0xA6,0x6E//好
  •                 ,0xB6,0xDC//嗎
  •                 ,0xB0,0x4A//衷
  •                 ,0xA4,0xDF//心
  •                 ,0xB7,0x50//感
  •                 ,0xC1,0xC2//謝
  •                 ,0xAC,0xC3//珍
  •                 ,0xAD,0xAB//重
  •                 ,0xA6,0x41//再
  •                 ,0xA8,0xA3//見
  •                 ,0xB4,0xC1//期
  •                 ,0xAB,0xDD//待
  •                 ,0xA6,0x41//再
  •                 ,0xAC,0xDB//相
  •                 ,0xB3,0x7B//逢
  •                 ,0x00};//'\0'
  •     puts(op);
  • }

  • 標程:

    #include<cstdio>
  • int main(){
  • puts("哈囉你好嗎衷心感謝珍重再見期待再相逢");
  • }






  • 作者: allenwhale    時間: 2014-5-28 19:07
    大家加油呀~這最多只有南區賽水題的等級而已阿
    作者: domen111    時間: 2014-5-30 22:08
    第一個code會wa




    歡迎光臨 竹園論壇 (http://forum.tfcis.org/) Powered by Discuz! X3.2