型キャストとgoto fail

投稿者: | 2020年10月18日

ABC180に参加してレートを燃やしています。一応ABCの銅相当の問題はすべて解いたのですが、やはり緑相当とかが解けるようにならないとだめかなあという感じです。しかし今回のはパフォーマンス400程度でやべーです。

今回のパフォーマンスが低い理由ですが、B問題とC問題で型キャストに起因する問題でTLEやWAを出しました。D問題もほぼ型キャストをちゃんと理解していなかったのでACできなかったという面もありました。

それで型キャストを調べたり試したりしていたので、結果のメモなど。あとgoto fallという単語を知らなかったのでそれも。

型キャストというか、私の間違った認識によるミスです。例えば、

int a = 1e6,b = 1e6;
long long c = a * b;  //c=-727379968になる

というコードです。私は、どうせlong long型に合わせられるのだから、掛け算の結果がint型の最大値を超えてても行けるだろうと思ってました。しかし、演算結果を代入するだけで、演算結果がオーバーフローしていれば正しい演算結果が代入されません。

なので、演算前に型キャストをしておくか、全部long longにしておくかするとこんなミスはしないと思います。

また、型キャストでも、static_castを使うほうが安全らしいです。競プロだとあんまり気にしなくて良い気がします。

参考:第33回目 C++の型変換でバグを未然に防ごう

また、

int a = 6, b = 4;
double c = (double)a / (double)b;
double d = (double)a / b;
double e = (double)(a / b);

とあった場合、cとdは1.5になりますが、eは1になります。

今までcのように書いてたので、dのように書いたほうが綺麗だなと思いました。

eは寝ぼけてたら書きそうなので注意します。

それで、goto failですが、これを読んだほうが良さそうです。

AppleがiOS7.0.6で修正したSSLバグの簡単な解説

到達不能コードの話です。なにかの拍子にやってしまうので、気をつけようと思いました。

あと、有名な話らしいので、知らなかった私は一体・・・。しかもこの事件は2014年なので、まあまあ昔の話。

まあ、私の学科は電気電子(情報)学科だし?

goto failはこの記事を読んで知りました。

マクロについて

レートが600超えないので過去問練習がんばりますが、研究がやばいのでそれどころじゃないですね。

就活までに緑になっておきたいと思ってたのですが、無理そう。

ていうかもう就活なの辛い。死にたい。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください