uva 10125(哈希)

来源:互联网 发布:大米营销软件骗局 编辑:程序博客网 时间:2024/05/26 07:30

题意:有一个s数集,要求找到最大的d满足 a + b + c = d,四个数都在集合内且都不相等。

题解:如果只三层循环求值会超时,可以先排序,然后把最大的值赋给d,然后计算是否成立。

#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int N = 1005;int t, s[N], d, c, b, a;int solve() {for (d = t - 1; d >= 0; d--) {for (c = t - 1; c >= 0 ; c--) {if (s[d] == s[c])continue;for (b = t - 1; b >= 0; b--) {if (s[d] == s[b] || s[c] == s[b])continue;for (a = t - 1; a >= 0; a--) {if (s[a] == s[d] || s[a] == s[b] || s[a] == s[c])continue;if (s[d] == s[c] + s[b] + s[a])return 1;}}}}return 0;}int main() {while (scanf("%d", &t) && t) {for (int i = 0; i < t; i++)scanf("%d", &s[i]);sort(s, s + t);if (solve())printf("%d\n", s[d]);elseprintf("no solution\n");}return 0;}


0 0
原创粉丝点击