環境
- windows 10
- wsl2
- g++
--stackは使えなかった
- とある問題にてメモ化再帰したが大きい値の時に手元の環境ではRE。再帰関数の呼びすぎでスタックオーバーフローしていると思われる。提出してみると通る
- https://codeforces.com/contest/1498/submission/111468957
- codeforcesではスタックサイズを多くとっているようだ https://codeforces.com/blog/entry/79
- 手元でもスタックサイズを大きくすれば通ると思ってオプションを調べるも、以下ではダメだった
$ g++ -Wl,--stack,10485760 answer.cpp /usr/bin/ld: unrecognized option '--stack' /usr/bin/ld: use the --help option for usage information collect2: error: ld returned 1 exit status
解決策
$ g++ -fsplit-stack answer.cpp $ ./a.out // 入力 1 500 250 // 出力 257950823 (答えが求まっている!) $ g++ answer.cpp $ ./a.out // 入力 1 500 250 // 出力 Segmentation fault (core dumped) (オプション指定しないと再帰しすぎでRE)
参考
- WSL で ulimit -s unlimited できない https://twitter.com/kimiyuki_u/status/1181912494559776768
- WSLで-fsplit-stackを足す https://github.com/yosupo06/library-checker-problems/issues/323
おまけ
- AtCoderの場合、コードテストすればいいだろう