POJ2549-Sumsets

    xiaoxiao2025-02-27  19

    这道题可以将a+b+c=d改为a+b=d-c,然后折半枚举d-c的所有可能性,然后找出是否存在a+b满足条件即可。

    #include <cstdio> #include <algorithm> using namespace std; const int maxn = 1000 + 5; int s[maxn]; int main(int argc, char const *argv[]) { int n; while (scanf("%d", &n) == 1 && n) { for (int i = 0; i < n; i++) { scanf("%d", &s[i]); } sort(s, s + n); int ans; bool find = false; for (int i = n - 1; i >= 0; i--) { for (int j = n - 1; j >= 0; j--) { if (i == j) { continue; } int sum = s[i] - s[j]; int l = 0, u = j - 1; while (l < u) { int acl = s[l] + s[u]; if (acl == sum) { find = true; ans = s[i]; break; } else if (acl > sum) { u--; } else { l++; } } if (find) { break; } } if (find) { break; } } if (find) { printf("%d\n", ans); } else { puts("no solution"); } } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-1296708.html
    最新回复(0)