本文共 1135 字,大约阅读时间需要 3 分钟。
#include#include #include using namespace std; const int n_max = 5e6 + 5; int t, n, a, b; struct node { long long data; int id; bool operator < (const node Next) const { return data < Next.data; } } A[n_max], B[n_max];int main(){ scanf("%d", & t); int cas = 0; while(t --) { scanf("%d %d %d", & n, & a, & b); long long temp; for(int i = 0; i < n; i ++) { scanf("%I64d", & temp); A[i].data = a * temp * temp; B[i].data = b * temp; A[i].id = B[i].id = i; } sort(A, A + n); sort(B, B + n); printf("Case #%d: ", ++ cas); if(A[n - 1].id != B[n - 1].id) printf("%I64d\n", A[n - 1].data + B[n - 1].data); else printf("%I64d\n", max(A[n - 1].data + B[n - 2].data, A[n - 2].data + B[n - 1].data)); } return 0;}
:
输入 n a b。之后第二行输入n 个整数t0, t1, t2, t3..tn-1…之后输出方程a * ti * ti + b * tj (i != j)的最大值。
题解:
参考了AC_Gibson的专栏,这确实好水..当时怎么没想到..就是用两个数组 A[] B[] 分别存 a * ti * ti 和 b * tj。排序讨论下AB数组最后2个值即可。(注 : 中间的temp 要用 long long 否则WA)。
转载地址:http://bjtpi.baihongyu.com/