// UVa 11057 - Exact Sum #include <iostream> #include <string.h> #include <stdio.h> using namespace std; #define mx 1000001 #define integer long long int integer abs(integer x) { if (x < 0) return -x; else return x; } int c[mx + 1], b[mx + 1]; integer a[10000]; int main() { int n; while (cin >> n) { memset(c, 0, sizeof(c)); for (int i = 0; i < n; i++) { cin >> a[i]; if (a[i] <= mx) { c[a[i]]++; if (c[a[i]] == 1) b[a[i]] = i; } } integer m; int s; cin >> m; integer best_dif = m; for (int i = 0; i < n; i++) { integer o = m - a[i]; if (o >= 0 && o <= mx && (c[o] > 1 || c[o] == 1 && b[o] != i)) { if (abs(a[i] - o) < best_dif) { best_dif = abs(a[i] - o); s = i; } } } printf("Peter should buy books whose prices are %lld and %lld.\n\n", min(a[s], m - a[s]), max(a[s], m - a[s])); } return 0; }
Tuesday, November 10, 2015
UVa 11057 - Exact Sum
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment