Code jam 2022 Round 1C Squary
https://codingcompetitions.withgoogle.com/codejam/round/0000000000877b42/0000000000afdf76#problem
数学题,利用和的平方与平方的和以及交叉项的关系求解。
可以在k<=2的范围内得到一个有效的解。

#include<bits/stdc++.h> using namespace std; typedef long long LL; int m_index = 0; LL BinarySearch(LL l, LL r, bool up, LL sum, LL square_sum) { while (l <= r) { LL mid = (r - l) / 2 + l; if ((sum + mid)*(sum + mid) == square_sum + mid * mid) return mid; else if ((sum + mid)*(sum + mid) > square_sum + mid * mid) { if (up) r = mid - 1; else l = mid + 1; } else { if (up) l = mid + 1; else r = mid - 1; } } return 0; } void YD() { m_index++; int n, k; cin >> n >> k; vector<LL> nums(n); for (int i = 0; i < n; i++) { cin >> nums[i]; } LL sum = 0; LL squre_sum = 0; for (int i = 0; i < n; i++) { sum += nums[i]; squre_sum += (nums[i] * nums[i]); } if (sum*sum == squre_sum) { cout << "Case #" << m_index << ": " << 0 << endl; return; } if (sum == 0) { cout << "Case #" << m_index << ": " << "IMPOSSIBLE" << endl; return; } LL res = 0; res = (squre_sum - sum * sum) / 2 / sum; if((sum+ res)*(sum+ res)==squre_sum+res*res) { cout << "Case #" << m_index << ": " << res << endl; return; } else { if(k==1) cout << "Case #" << m_index << ": " << "IMPOSSIBLE" << endl; else { LL n1=1-sum; sum+=n1; squre_sum+=n1*n1; LL sp=(sum*sum-squre_sum)/2; LL n2=-sp; cout << "Case #" << m_index << ": " <<n1<<' '<<n2<<endl; } } } int main() { int T; cin >> T; while (T--) { YD(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人