d671. 11716 - Digital Fortress
標籤 :
通過比率 : 706人/731人 ( 97% ) [非即時]
評分方式:
Tolerant

最近更新 : 2010-03-23 14:41

內容

I I U P C   2 0 0 9

上一屆的 IIUPC 有一題「達文西密碼」是以丹布朗的暢銷書「達文西密碼」為故事背景。這一題則是以科技驚悚小說「數位堡壘」為背景。題目給你一個密文,你要用下述的解碼方式來解碼。比如說,如果密文如下:
WECGEWHYAAIORTNU
輸出則是:
WEAREWATCHINGYOU

上例中所給的密文 "WECGEWHYAAIORTNU" 有 16 個字元,也就是 4 的平方。請把這些字元以「列優先」(row major,第一列放滿後再放第二列,再第三列……) 的方式置入一個 n ´ n (本例為 4 ´ 4) 的格子。本例密文放置完成後的格子如下:
W E C G
E W H Y
A A I O
R T N U

當我們以「行優先」(column major,取完第一行再取第二行,然後第三行) 的方式將上面格子的字元取出便可以得到以下的明文:
WEAREWATCHINGYOU

輸入說明
輸入的第一行有一個數字 T,接著有 T 筆測資,每筆測資一行,該行便是要處理的密文。密文僅包含大寫字母及空白。密文的總字元數不會超過 10,000。
輸出說明
相對於每筆測資,請將明文輸出於一行。若輸入的字元數不是完全平方數,請輸出「INVALID」。
範例輸入 #1
3
WECGEWHYAAIORTNU
DAVINCICODE
DTFRIAOEGLRSI TS
範例輸出 #1
WEAREWATCHINGYOU
INVALID
DIGITAL FORTRESS
測資資訊:
記憶體限制: 512 MB
提示 :

在你用 cin >> t; 去輸入第一個數字之後,其後的換行字元會留在輸入檔中等待輸入。之後第一次執行 getline (cin, s); 時會碰到這個換行字元,s 會傳會一個空字串。您可以用以下的方式來輸入:

cin >> t; getline (cin, s); //讀掉t後面的換行 while (t--) { getline (cin, s); : : } 

 

標籤:
出處:
UVa11716 [管理者: snail (蝸牛) ]

本題狀況 本題討論 排行

編號 身分 題目 主題 人氣 發表日期
41337 toseanlin@gm ... (Dr. SeanXD) d671
C++詳解
80 2024-07-18 10:02
26722 406490150@gm ... (我是朱朱) d671 683 2021-08-21 18:14