所有的样例都过了,但还是 60pts。
代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXR = 1e3 + 5;
typedef long long ll;
ll n, op, ans, maxn, x, y, z, ii, jj;
ll Pow (ll x) {return x * x * x;}
struct node {ll x, id;}max1[MAXR][MAXR], max2[MAXR][MAXR];
int main ()
{
scanf ("%lld", &n);
for (int i = 1; i <= n; i++)
{
scanf ("%lld%lld%lld", &x, &y, &z);maxn = max (maxn, max (x, max (y, z)));
ll tmp = Pow (min (x, min (y, z))) / 4ll;
if (ans < tmp)
{
ans = tmp;
ii = i;
}
if (max1[x][y].x <= z && max1[x][y].id != i)
{
max2[x][y].x = max1[x][y].x;
max2[x][y].id = max1[x][y].id;
max1[x][y].x = z;
max1[x][y].id = i;
}
if (max1[y][x].x <= z && max1[y][x].id != i)
{
max2[y][x].x = max1[y][x].x;
max2[y][x].id = max1[y][x].id;
max1[y][x].x = z;
max1[y][x].id = i;
}
if (max1[x][z].x <= y && max1[x][z].id != i)
{
max2[x][z].x = max1[x][z].x;
max2[x][z].id = max1[x][z].id;
max1[x][z].x = y;
max1[x][z].id = i;
}
if (max1[z][x].x <= y && max1[z][x].id != i)
{
max2[z][x].x = max1[z][x].x;
max2[z][x].id = max1[z][x].id;
max1[z][x].x = y;
max1[z][x].id = i;
}
if (max1[y][z].x <= x && max1[y][z].id != i)
{
max2[y][z].x = max1[y][z].x;
max2[y][z].id = max1[y][z].id;
max1[y][z].x = x;
max1[y][z].id = i;
}
if (max1[z][y].x <= x && max1[z][y].id != i)
{
max2[z][y].x = max1[z][y].x;
max2[z][y].id = max1[z][y].id;
max1[z][y].x = x;
max1[z][y].id = i;
}
}
for (ll i = 1; i <= maxn; i++)
{
for (ll j = 1; j <= maxn; j++)
{
ll tmp = Pow (min (min (i, j), max1[i][j].x + max2[i][j].x)) / 4ll;
if (tmp > ans)
{
ans = tmp;
op = 1;
ii = max1[i][j].id;jj = max2[i][j].id;
}
}
}
printf ("%lld\n", op);
if (op) printf ("%lld %lld\n", min (ii, jj), max (ii, jj));
else printf ("%lld\n", ii);
printf ("%lld", ans);
return 0;
}
悬赏1关注