From e89c6891dcd38eff5ce27ced8d582228847b518a Mon Sep 17 00:00:00 2001 From: oncsr Date: Thu, 20 Feb 2025 13:35:42 +0900 Subject: [PATCH] =?UTF-8?q?[20250220]=20BOJ=20/=20G5=20/=20=EB=9D=BC?= =?UTF-8?q?=EA=B7=B8=EB=9E=91=EC=A3=BC=EC=9D=98=20=EB=84=A4=20=EC=A0=9C?= =?UTF-8?q?=EA=B3=B1=EC=88=98=20=EC=A0=95=EB=A6=AC=20/=20=EA=B6=8C?= =?UTF-8?q?=ED=98=81=EC=A4=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\354\210\230 \354\240\225\353\246\254.md" | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 "khj20006/202502/20 BOJ G5 \353\235\274\352\267\270\353\236\221\354\243\274\354\235\230 \353\204\244 \354\240\234\352\263\261\354\210\230 \354\240\225\353\246\254.md" diff --git "a/khj20006/202502/20 BOJ G5 \353\235\274\352\267\270\353\236\221\354\243\274\354\235\230 \353\204\244 \354\240\234\352\263\261\354\210\230 \354\240\225\353\246\254.md" "b/khj20006/202502/20 BOJ G5 \353\235\274\352\267\270\353\236\221\354\243\274\354\235\230 \353\204\244 \354\240\234\352\263\261\354\210\230 \354\240\225\353\246\254.md" new file mode 100644 index 00000000..2653b8ec --- /dev/null +++ "b/khj20006/202502/20 BOJ G5 \353\235\274\352\267\270\353\236\221\354\243\274\354\235\230 \353\204\244 \354\240\234\352\263\261\354\210\230 \354\240\225\353\246\254.md" @@ -0,0 +1,40 @@ +```cpp + +#include +#include +#include +using namespace std; + +int main() +{ + cin.tie(0)->sync_with_stdio(0); + + int N; + for (cin >> N; N; cin >> N) { + + vector A; + int ans = 0; + for (int i = 1; i*i <= N; i++) A.push_back(i*i); + int M = A.size(); + + // 1 + if (A.back() == N) ans++; + // 2 + for (int i = 0; i < M; i++) for (int j = i; j < M; j++) if (A[i] + A[j] == N) ans++; + // 3 + for (int i = 0; i < M; i++) for (int j = i; j < M; j++) { + if (A[i] + A[j] >= N) break; + ans += upper_bound(A.begin() + j, A.end(), N - A[i] - A[j]) - lower_bound(A.begin() + j, A.end(), N - A[i] - A[j]); + } + // 4 + for (int i = 0; i < M; i++) for (int j = i; j < M; j++) for (int k = j; k < M; k++) { + if (A[i] + A[j] + A[k] >= N) break; + ans += upper_bound(A.begin() + k, A.end(), N - A[i] - A[j] - A[k]) - lower_bound(A.begin() + k, A.end(), N - A[i] - A[j] - A[k]); + } + + cout << ans << '\n'; + } + +} + +```