LoginSignup
4
0

More than 1 year has passed since last update.

競技プログラミングでdcを使う(3/?)

Last updated at Posted at 2021-07-15

1 2 3 4 5(執筆中)

はじめに

ここではd,r,s等のコマンドについて解説します。

f

これはスタックの内容を上から順に全て出力します。
自分のコードが正しく動いているかの確認などに使えます。

7 2 5f
出力 7
2
5

b03_01.png

d

一番上のデータを複製して一番上に積みます。

2d

b03_02.png

r

一番目と二番目のデータを入れ替えます。

3 2r

b03_03.png

s x , l x

一番上のデータを取り出し、s xx という名前の変数に入れます。l xx のデータをスタックの一番上に積みます。 x は一文字のものに限ります。数字でも正常に動きます。

1 2 3sxlxlx

b03_04.png

P

文字列をスタックに積むときは[characters]と書きます。
「P」はスタックの一番上の文字列を取り出し、改行を付けずに出力します。一番上が数値であればその数値が文字コードになる文字を出力します。数値が256以上であれば256進数に直して、文字を2文字以上出力します。

[cde]24930PP
出力 abcde

b03_05.png

$24930=97\times256+98$
で97はa、98はbなのでabを出力しています。

R

一番上の数値nを取り出し、残ったスタックの上からn番目のデータを一番上に持ってきます。
一番上の数値が-n (n>0) の場合は一番上のデータを上からn番目になるように入れ替えます。

[f][e][d][c][b][a]4R

b03_06.png


[f][e][d][c][b][a]0 4-R

b03_07.png

nがデータの数よりも大きいときはnがデータの数と同じときのふるまいをします。

実際の問題

ABC005

入力 4 7
?r/p
出力 1

a005_01.png


ABC012

入力 1 2
?n[ ]Pp
出力 2 1

a012_01.png
空白の文字コードは32であるため、[ ]の部分は32としてもよい


ABC014

入力 7
3
??dd4Rr%-r%p
出力 2

a014_02.png

入力をa,bとします。「dd4Rr」でまずデータを意図した順に並べます。次に$b-a\%b$でいくつ買い足すかを求めますが、これだと買い足す必要がないときの答えが$b$になってしまうのでこれをbで割った余りにしています。

下はRのコマンドを知る前に私の書いたコードです。

入力 7
3
?d1-?dsa/1+la*r-p
出力 2

a014_01.png

入力をa,bとします。$a \leqq bn$を満たす最小のnを求めて$bn-a$を答えとしています。$bn=a$となる場合のために「1-」をしています。

おわりに

ここまでの知識で解ける問題があるのでこちらの「基本的なコマンドを用いる」の箇所にある問題を解いてみましょう。
次回はif文を使うような場合の操作を勉強します。

1 2 3 4 5(執筆中)

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0