最近ちょいちょいCode forcesの過去問とかをD言語で解いてるので、そのメモ
StopWatch(乱択とかでTLEギリギリまで回し続けるとか)
import std.datetime; int main() { StopWatch sw; sw.start(); while (sw.peek().msecs < 1800) { hoge(); } return 0; }
これは実行時間が1800msを超えたらループを抜けるコードですね…うわぁ…そのままだなぁ…
入力
Cfでよくある、
\(n\)
\(a_1\ a_2\ a_3\ ..\ a_n\)
という入力形式
import std.stdio, std.conv, std.string, std.algorithm, std.range; int main() { int n; readf("%d\n", &n); auto a = readln().split().map!(to!int).array; return 0; }
注意点としてはreadfの\nが無いとつらいって事ですね
速度は速くはないと思う
stdin.rawRead(new char[](2^^20))
とかで全部最初に読むと速いかも
速度で死んだので色々試してみた。
結果、core.stdc.stdioをimportしてscanfを叩くのが楽、当然だけどlongの読み込みに%ldとか使わなきゃいけない
builtin_popcount
import std.stdio; import core.bitop; int main() { writeln(popcnt(0b10010011101011)); //8 writeln(popcnt(10)); //2 return 0; }
popcnt(uint i)でiの立ってるbitの数を数えます。
stack_size(macのみ)
macだとスタックオーバーフローがアレなので
dmd source.d -L-stack_size -L100000000 とか