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

[1](https://qiita.com/shogo314/items/abdf5e8e9e213bafe837) [2](https://qiita.com/shogo314/items/059094162959029cce3e) [3](https://qiita.com/shogo314/items/6838b0beb84f911f0515) **4** 5(執筆中)

# はじめに
ここではif文を書くような場面でのコマンドを紹介します。
# メモリについて
説明をする前にメモリについて解説します。前のページでs *x*とl *x*について紹介しましたが、この*x*がメモリです。前のページでは変数と書きましたね。この後で*x*を実行すると表現しますが、これは*x*というコマンドを実行するという意味ではなく*x*に入っている内容を実行するという意味です。*x*には数値や文字列を入れることが出来ますが、*x*を実行するとそれがコード内に書かれていたときのように動きます。メモリは0で初期化されているのでメモリに何かを入れるような操作をしていない場合は0をスタックに積むことになります。このページではこの0を積む操作をする問題だけを扱います。

# >*x*
スタックから2つの値を取り出し、一番上の数値が二番目の数値より大きい場合に*x*を実行します。

```
1 2>0
```

![b_04_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/f2a68da5-ba1b-a452-86e6-4daefc1caf90.png)

ややこしいのですが、この場合一番上は2になっているのでこうなります。<br>0というメモリには何も入れる操作をしていないので0が入っています。

```
2 2>0
```

![b_04_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/1400fd95-d8c3-6b98-2ee6-1569e09d9bdf.png)

不等号が成り立たない場合は何もしません。

# !>*x*
他の大抵の言語と同様、「!」を前に付けると否定の意味になります。<br>スタックから2つの値を取り出し、一番上の数値が二番目の数値より大きい場合に*x*を実行します。

```
1 2!>0
```

![b_04_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/99e1fcf4-678a-28f5-f54b-083ff36e91e2.png)

```
2 2!>0
```

![b_04_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/99dd5efd-9d7a-122a-7646-c3c6f4e18a8b.png)

# <*x*
面倒なのでここから説明は省きます。

```
2 1<0
```

![b_04_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/1679fff5-c4df-abf8-a7b2-621e1fb64af5.png)

```
1 2<0
```

![b_04_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/adedd7e8-260d-4783-108e-8f572b7e33d1.png)

# !<*x*

```
2 1!<0
```

![b_04_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/ef28bb82-c988-b5fe-2978-f5295e37a172.png)

```
1 2!<0
```

![b_04_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/522d4629-ab61-b0b0-6b5d-f4ce1951c55e.png)

# =*x*

```
2 2=0
```

![b_04_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/dbd27eff-a118-8d01-9351-a7ed1969089d.png)

```
2 1=0
```

![b_04_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/9f06ee10-e8b1-ebe9-7dcd-8a163027385a.png)

# !=*x*

```
2 2!=0
```

![b_04_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/c761092b-ac09-8e5e-efc6-7efa375b12dc.png)

```
2 1!=0
```

![b_04_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/d7ea330f-8a4e-7b67-d33a-6fb3f47e79ad.png)

# 実際の問題

[ABC016](https://atcoder.jp/contests/abc016/tasks/abc016_1)

```
[NO][YES]?%0=0rp
```

|入力|1 1|
|:-:|:-|

|出力|YES|
|:-:|:-|

![a_016_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/369798a2-8cca-6200-3cfb-f5e3985e6265.png)

|入力|2 29|
|:-:|:-|

|出力|NO|
|:-:|:-|

![a_016_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1327735/ea5db836-85e4-92fa-2e80-f1538855db8f.png)

このように不等号が成り立つかで、スタックの数に差を付けて出力を操作します。

# おわりに
ここまでの知識で解ける問題があるので[こちら](https://qiita.com/shogo314/items/fff4be1573d2f86dba2a#%E5%8D%98%E7%B4%94%E3%81%AAif)の「単純なif」の箇所にある問題を解いてみましょう。
次回はもう少し複雑なif文を使うような場合の操作を勉強します。

#
[1](https://qiita.com/shogo314/items/abdf5e8e9e213bafe837) [2](https://qiita.com/shogo314/items/059094162959029cce3e) [3](https://qiita.com/shogo314/items/6838b0beb84f911f0515) **4** 5(執筆中)