1. ホーム
  2. Other

0x3f3f3fとは何ですか?

2022-02-21 12:34:54

ACMでよく使われる無限大定数 - 0x3f3f3f

最近、問題をやったり、解答を読んだりしていると、大御所の解答レポートによくこのような行があることに気づきました。↓ ↓↓↓

const int inf = 0x3f3f3f3f;

それから探ってみると、0x3f3f3fの10進数は1061109567で、10^9レベルであり、一般にデータは10^9より小さいので、データが無限大にならずに無限大として使えるのですね。 

一般的なDFSまたはDPは、いくつかの存在しないケースの真ん中に問題の最小値を見つけるために、私は通常、メソッドを使用すると、最小値に行くときにこのケース(私はそれがプロの練習であるかどうかわからない)、私は通常このquotを取るように、非常に大きな値&quotです、あなたが答えを選択しますされていない場合例えば、BFSが1万層の木を最短で切断する場合は、10005年の値を取る。

マクロでは考える時間を短縮するために0x3f3f3fを定義しているので、一般的には無限大の数として使うことができる。

誰かのブログから段落を引用する。

<ブロッククオート

0x3f3f3fは有用な値で、次の2つの条件を満たす最大の整数です。

1. 整数の2倍は、intが表現できる最大の正の整数である0x7f7f7fを超えない。

2. 整数の8ビット毎(バイト毎)が同じであること。

配列 a を初期化するために memset(a, val, sizeof a) をよく使います。この文は配列 a の各バイトを値 val (0x00~0xFF) で埋めるので、memset は "8 ビットごとに同一の int しか割り当てられません"。

配列を正の無限大に初期化する必要がある場合、加算オーバーフローや面倒な判定を避けるために、代わりにmemset(a, 0x3f, sizeof(a)) を使って0x3f3f3fの値を代入することが多いようです。

こちらもご覧ください。 https://blog.csdn.net/jiange_zh/article/details/50198097