Studschiffret | 프로그래밍의 벗 PivotOJ
PivotOJ

Studschiffret

시간 제한: 1000ms메모리 제한: 1024MB출처: Programmeringsolympiaden 2019 — skolkvalBOJ 20834
이 문제는 본문 이미지 일부가 표시되지 않습니다. 텍스트만으로 풀이가 어려울 수 있습니다.

문제

Fretchif har hittat på ett revolutionärt chiffer som ingen kommer kunna lösa! Så här går det till: Man väljer en sträng att kryptera och två heltal NN och MM. Sedan ritar man upp ett rutnät med NN rader och MM kolumner. Därefter börjar man skriva ut strängen man krypterar en bokstav i taget snett nedåt till höger från översta vänstra hörnet. Om vi numrerar kolumnerna från vänster till höger 11 till MM, och raderna uppifrån och ned 11 till NN så hamnar första bokstaven hamnar på position (1,1)(1,1), andra på (2,2)(2,2), tredje på (3,3)(3,3) och så vidare. När man kommer till en av rutnätets väggar, så låter man ”bokstavsstrålen” studsa på väggen (se exempelförklaringen). Ifall man vid något tillfälle hamnar på en ruta som det redan står en bokstav i, så tar bokstaven man skulle skrivit och skriver den i nästa lediga ruta man kommer till istället. När alla bokstäver i strängen som krypteras är slut så läser man av rutnätet rad för rad, och det blir det krypterade meddelandet. 

Givet ett meddelande som Fretchif krypterat med studschiffret, och givet storleken på rutnätet som användes, skriv ut orginalmeddelandet.

Notera att vissa meddelanden inte går att kryptera med vissa storlekar på rutnät, då det är möjligt att man aldrig kommer till någon ny ledig ruta men fortfarande har bokstäver kvar att placera ut. Här är det dock garanterat att det inte hände när Fretchif krypterade strängen.

입력

På första raden står två heltal 2N202 \leq N \leq 20 och 2M202 \leq M \leq 20, antalet rader och kolumner i rutnätet. På andra raden står en sträng med KK bokstäver (1K301 \leq K \leq 30), det krypterade meddelandet. Meddelandet består endast av bokstäverna A till Z och alla bokstäver är stora. Det är garanterat att det finns en möjlig ursprungssträng som ger denna chiffertext.

출력

Programmet ska skriva ut en rad med en sträng: orginalmeddelandet, så som det såg ut innan det krypterades.

힌트

Säg att strängen vi ska kryptera är ABCDEFGHIKLMNOPQRST, och att rutnätet har storlek 6×136 \times 13. Så här ser rutnätet ut vid olika tidspunkter i krypteringen:

[이미지 1] [이미지 2]
Efter 6 bokstäver är skrivna Efter 8 bokstäver är skrivna, vi har nu studsat en gång i bottenväggen
[이미지 3] [이미지 4]
Efter 14 bostäver är skrivna, vi har nu även studsat i övre och högra väggen Efter alla 20 bokstäver är skrivna, notera att vi inte skrev över H:et med ett R, utan vi skrev R:et på nästa lediga plats

I det här exemplet blir alltså det krypterade meddelandet ATKBSJLCRIMDHNEGQOFP. Exempel 2 är att avkoda ATKBSJLCRIMDHNEGQOFP, vilket då avkodas till ABCDEFGHIKLMNOPQRST.

예제

예제 1

입력
2 20
PORMEIGRGAMRN
출력
PROGRAMMERING

예제 2

입력
6 13
ATKBSJLCRIMDHNEGQOFP
출력
ABCDEFGHIJKLMNOPQRST

예제 3

입력
5 7
SLUIMPEGEHTR
출력
SUPERHEMLIGT

예제 4

입력
15 19
DALIGREKTANGEL
출력
DALIGREKTANGEL
코드를 제출하려면 로그인하세요.