机试题 三数之和变形-三数和赛高数组01 任意
数组a 对任意的i、j、k都能找到l,使得ai + aj + ak = al,那么这个数组就是被称为三数和赛高数组,特别的i、j、k需要满足(1 <= i < j < k <= n, 1 <= l <= n)。
输入:
首先 t (1 <= t <= 1000) 代表t组数据。
然后 每组数据先输入一个n (3 <= n <= 200000), 代表数组的长度为n,接下来是n个数字a1, a2, ... , an (-10^9 <= ai <= 10^9)
输出:
每组数据,如果是三数和赛高数组就输出"YES",否则输出"NO"
test1
input:
4 3 1 0 -1 5 1 -2 -2 1 -3 6 0 0 0 0 0 0 4 -1 2 -3 4
output:
YES NO YES NO
my code
#include <iostream> #include <unordered_set> using namespace std; void solution() { int n; cin >> n; int num, cout_zero = 0, sum = 0; unordered_set<int> negative, positive; for (int i = 0; i < n; ++i){ cin >> num; if (num < 0){ negative.insert(num); sum += num; } else if (num > 0){ positive.insert(num); sum += num; } else cout_zero++; } bool flag = false; if (n == 3) { if (sum == 0) flag = true; else if (sum < 0) flag = negative.find(sum) != negative.end(); else flag = positive.find(sum) != positive.end(); } else if (n == 4 && sum == 0) { if (cout_zero == 4 || (positive.size() == 1 && negative.size() == 0)) flag = true; } else if (sum == 0) { if (cout_zero == n || (cout_zero == n - 2 && sum == 0)) flag = true; } cout << (flag ? "YES" : "NO") << endl; return; } int main() { int t; cin >> t; while(t--) solution(); return 0; }
analyse
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具