From ae73b1baf18708595d821bb47c15618852dddf0c Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Sun, 20 Apr 2025 16:53:59 -0400 Subject: [PATCH] feat: refactor --- codeforces/886/compile_flags.txt | 25 +++++++++++++++ codeforces/886/debug_flags.txt | 12 +++++++ codeforces/886/{ => io}/a.in | 0 codeforces/886/{h.in => io/a.out} | 0 codeforces/886/{ => io}/b.in | 0 codeforces/886/{ => io}/b.out | 0 codeforces/886/{ => io}/c.in | 0 codeforces/886/{ => io}/c.out | 0 codeforces/886/{ => io}/d.in | 0 codeforces/886/{ => io}/d.out | 0 codeforces/886/{ => io}/e.in | 0 codeforces/886/{ => io}/e.out | 0 codeforces/886/{ => io}/f.in | 0 codeforces/886/{ => io}/f.out | 0 codeforces/886/{ => io}/g.in | 0 codeforces/886/{ => io}/g.out | 0 codeforces/886/{h.out => io/h.in} | 0 codeforces/886/io/h.out | 0 codeforces/886/makefile | 28 ++++++++++++++++ codeforces/886/scripts/debug.sh | 29 +++++++++++++++++ codeforces/886/scripts/run.sh | 29 +++++++++++++++++ codeforces/886/scripts/utils.sh | 53 +++++++++++++++++++++++++++++++ codeforces/995/e.cc | 4 +++ 23 files changed, 180 insertions(+) create mode 100644 codeforces/886/debug_flags.txt rename codeforces/886/{ => io}/a.in (100%) rename codeforces/886/{h.in => io/a.out} (100%) rename codeforces/886/{ => io}/b.in (100%) rename codeforces/886/{ => io}/b.out (100%) rename codeforces/886/{ => io}/c.in (100%) rename codeforces/886/{ => io}/c.out (100%) rename codeforces/886/{ => io}/d.in (100%) rename codeforces/886/{ => io}/d.out (100%) rename codeforces/886/{ => io}/e.in (100%) rename codeforces/886/{ => io}/e.out (100%) rename codeforces/886/{ => io}/f.in (100%) rename codeforces/886/{ => io}/f.out (100%) rename codeforces/886/{ => io}/g.in (100%) rename codeforces/886/{ => io}/g.out (100%) rename codeforces/886/{h.out => io/h.in} (100%) create mode 100644 codeforces/886/io/h.out create mode 100644 codeforces/886/makefile create mode 100644 codeforces/886/scripts/debug.sh create mode 100644 codeforces/886/scripts/run.sh create mode 100644 codeforces/886/scripts/utils.sh diff --git a/codeforces/886/compile_flags.txt b/codeforces/886/compile_flags.txt index 504aea8..5725a8c 100644 --- a/codeforces/886/compile_flags.txt +++ b/codeforces/886/compile_flags.txt @@ -1,6 +1,31 @@ +-O2 -Wall -Wextra -Wpedantic -Wshadow +-Wformat=2 +-Wfloat-equal +-Wlogical-op +-Wshift-overflow=2 +-Wnon-virtual-dtor +-Wold-style-cast +-Wcast-qual +-Wuseless-cast +-Wno-sign-promotion +-Wcast-align +-Wunused +-Woverloaded-virtual +-Wconversion +-Wsign-conversion +-Wmisleading-indentation +-Wduplicated-cond +-Wduplicated-branches +-Wlogical-op +-Wnull-dereference +-Wformat=2 +-Wformat-overflow +-Wformat-truncation +-Wdouble-promotion +-Wundef -DLOCAL -std=c++23 diff --git a/codeforces/886/debug_flags.txt b/codeforces/886/debug_flags.txt new file mode 100644 index 0000000..03cba1b --- /dev/null +++ b/codeforces/886/debug_flags.txt @@ -0,0 +1,12 @@ +-g3 +-fsanitize=address,undefined +-fsanitize=float-divide-by-zero +-fsanitize=float-cast-overflow +-fno-sanitize-recover=all +-fstack-protector-all +-fstack-usage +-fno-omit-frame-pointer +-fno-inline +-ffunction-sections +-D_GLIBCXX_DEBUG +-D_GLIBCXX_DEBUG_PEDANTIC diff --git a/codeforces/886/a.in b/codeforces/886/io/a.in similarity index 100% rename from codeforces/886/a.in rename to codeforces/886/io/a.in diff --git a/codeforces/886/h.in b/codeforces/886/io/a.out similarity index 100% rename from codeforces/886/h.in rename to codeforces/886/io/a.out diff --git a/codeforces/886/b.in b/codeforces/886/io/b.in similarity index 100% rename from codeforces/886/b.in rename to codeforces/886/io/b.in diff --git a/codeforces/886/b.out b/codeforces/886/io/b.out similarity index 100% rename from codeforces/886/b.out rename to codeforces/886/io/b.out diff --git a/codeforces/886/c.in b/codeforces/886/io/c.in similarity index 100% rename from codeforces/886/c.in rename to codeforces/886/io/c.in diff --git a/codeforces/886/c.out b/codeforces/886/io/c.out similarity index 100% rename from codeforces/886/c.out rename to codeforces/886/io/c.out diff --git a/codeforces/886/d.in b/codeforces/886/io/d.in similarity index 100% rename from codeforces/886/d.in rename to codeforces/886/io/d.in diff --git a/codeforces/886/d.out b/codeforces/886/io/d.out similarity index 100% rename from codeforces/886/d.out rename to codeforces/886/io/d.out diff --git a/codeforces/886/e.in b/codeforces/886/io/e.in similarity index 100% rename from codeforces/886/e.in rename to codeforces/886/io/e.in diff --git a/codeforces/886/e.out b/codeforces/886/io/e.out similarity index 100% rename from codeforces/886/e.out rename to codeforces/886/io/e.out diff --git a/codeforces/886/f.in b/codeforces/886/io/f.in similarity index 100% rename from codeforces/886/f.in rename to codeforces/886/io/f.in diff --git a/codeforces/886/f.out b/codeforces/886/io/f.out similarity index 100% rename from codeforces/886/f.out rename to codeforces/886/io/f.out diff --git a/codeforces/886/g.in b/codeforces/886/io/g.in similarity index 100% rename from codeforces/886/g.in rename to codeforces/886/io/g.in diff --git a/codeforces/886/g.out b/codeforces/886/io/g.out similarity index 100% rename from codeforces/886/g.out rename to codeforces/886/io/g.out diff --git a/codeforces/886/h.out b/codeforces/886/io/h.in similarity index 100% rename from codeforces/886/h.out rename to codeforces/886/io/h.in diff --git a/codeforces/886/io/h.out b/codeforces/886/io/h.out new file mode 100644 index 0000000..e69de29 diff --git a/codeforces/886/makefile b/codeforces/886/makefile new file mode 100644 index 0000000..9c5450b --- /dev/null +++ b/codeforces/886/makefile @@ -0,0 +1,28 @@ +.PHONY: run debug clean setup init + +SRC = $(word 2,$(MAKECMDGOALS)) + +.SILENT: + +run: + sh scripts/run.sh $(SRC) + +debug: + sh scripts/debug.sh $(SRC) + +clean: + rm -rf build/* + +setup: + test -d build || mkdir -p build + test -d io || mkdir -p io + test -d scripts || mkdir -p scripts + test -f compile_flags.txt || cp $(HOME)/.config/cp-template/compile_flags.txt . + test -f .clangd || cp $(HOME)/.config/cp-template/.clangd . + test -f .clang-format || cp $(HOME)/.config/cp-template/.clang-format . + +init: + make setup + +%: + @: diff --git a/codeforces/886/scripts/debug.sh b/codeforces/886/scripts/debug.sh new file mode 100644 index 0000000..2979422 --- /dev/null +++ b/codeforces/886/scripts/debug.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +. ./scripts/utils.sh + +SRC="$1" +BASE=$(basename "$SRC" .cc) +INPUT="${BASE}.in" +OUTPUT="${BASE}.out" +DBG_BIN="${BASE}.debug" + +test -d build || mkdir -p build +test -d io || mkdir -p io + +test -f "$INPUT" && test ! -f "io/$INPUT" && mv "$INPUT" "io/" +test -f "$OUTPUT" && test ! -f "io/$OUTPUT" && mv "$OUTPUT" "io/" + +test -f "io/$INPUT" || touch "io/$INPUT" +test -f "io/$OUTPUT" || touch "io/$OUTPUT" + +INPUT="io/$INPUT" +OUTPUT="io/$OUTPUT" +DBG_BIN="build/$DBG_BIN" + +compile_source "$SRC" "$DBG_BIN" "$OUTPUT" @debug_flags.txt +CODE=$? +test $CODE -gt 0 && exit $CODE + +execute_binary "$DBG_BIN" "$INPUT" "$OUTPUT" +exit $? diff --git a/codeforces/886/scripts/run.sh b/codeforces/886/scripts/run.sh new file mode 100644 index 0000000..ab9aa7d --- /dev/null +++ b/codeforces/886/scripts/run.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +. ./scripts/utils.sh + +SRC="$1" +BASE=$(basename "$SRC" .cc) +INPUT="${BASE}.in" +OUTPUT="${BASE}.out" +RUN_BIN="${BASE}.run" + +test -d build || mkdir -p build +test -d io || mkdir -p io + +test -f "$INPUT" && test ! -f "io/$INPUT" && mv "$INPUT" "io/" +test -f "$OUTPUT" && test ! -f "io/$OUTPUT" && mv "$OUTPUT" "io/" + +test -f "io/$INPUT" || touch "io/$INPUT" +test -f "io/$OUTPUT" || touch "io/$OUTPUT" + +INPUT="io/$INPUT" +OUTPUT="io/$OUTPUT" +RUN_BIN="build/$RUN_BIN" + +compile_source "$SRC" "$RUN_BIN" "$OUTPUT" "" +CODE=$? +test $CODE -gt 0 && exit $CODE + +execute_binary "$RUN_BIN" "$INPUT" "$OUTPUT" +exit $? diff --git a/codeforces/886/scripts/utils.sh b/codeforces/886/scripts/utils.sh new file mode 100644 index 0000000..e99b25b --- /dev/null +++ b/codeforces/886/scripts/utils.sh @@ -0,0 +1,53 @@ +#!/bin/sh + +execute_binary() { + binary="$1" + input="$2" + output="$3" + + start=$(date '+%s.%N') + timeout 2s ./"$binary" <"$input" >"$output" 2>&1 + CODE=$? + end=$(date '+%s.%N') + truncate -s "$(head -n 1000 "$output" | wc -c)" "$output" + + if [ $CODE -ge 124 ]; then + MSG='' + case $CODE in + 124) MSG='TIMEOUT' ;; + 128) MSG='SIGILL' ;; + 130) MSG='SIGABRT' ;; + 131) MSG='SIGBUS' ;; + 136) MSG='SIGFPE' ;; + 135) MSG='SIGSEGV' ;; + 137) MSG='SIGPIPE' ;; + 139) MSG='SIGTERM' ;; + esac + [ $CODE -ne 124 ] && sed -i '$d' "$output" + test -n "$MSG" && printf '\n[code]: %s (%s)' "$CODE" "$MSG" >>"$output" + else + printf '\n[code]: %s' "$CODE" >>"$output" + fi + + printf '\n[time]: %s ms' "$(awk "BEGIN {print ($end - $start) * 1000}")" >>$output + return $CODE +} + +compile_source() { + src="$1" + bin="$2" + output="$3" + flags="$4" + + test -f "$bin" && rm "$bin" || true + g++ @compile_flags.txt $flags "$src" -o "$bin" 2>"$output" + CODE=$? + + if [ $CODE -gt 0 ]; then + printf '\n[code]: %s' "$CODE" >>"$output" + return $CODE + else + echo '' >"$output" + return 0 + fi +} diff --git a/codeforces/995/e.cc b/codeforces/995/e.cc index b0be64d..1dbada9 100644 --- a/codeforces/995/e.cc +++ b/codeforces/995/e.cc @@ -77,6 +77,10 @@ void solve() { prices.erase(unique(all(prices)), prices.end()); sort(all(a)); sort(all(b)); + // fundamentally cooked - thought oculd binary search over the range (this is just not tree) + // "pass tc = right" mindset - braindead + // low patience -> lack of focus (phone?) gave up on e and f, espec. when + // f was doable for (i64 price : prices) { i64 A = n - distance(a.begin(), lower_bound(all(a), price));