牛客小白月賽4 A 三角形
阿新 • • 發佈:2018-06-18
() ont OS namespace 一個 分類 代碼簡潔 include str
題解+AC代碼
首先將木棍按長度排序,可以確定的是可以組成的最大三角形的三根木棍就是連著的三個如果偷走的木棍不是這三根木棍中的其中一個,那麽答案顯然,否則分類處理一下。
#include<iostream>
#include<cstring>
#include<cstdbool>
#include<algorithm>
using namespace std;
int n, p;
struct node
{
long long x, y;
}a[100005],b[100005];
bool com(node p, node q)
{
return p.y > q.y;
}
int main()
{
while (cin >> n >> p)
{
for (int i = 0; i < n; ++i)
{
cin >> a[i].y;
a[i].x = i+1;
}
for (int i = 0; i < n; ++i)
b[i] = a[i];
sort(b, b + n,com);
int ans = 0 ,ant = 1, off = 0;
if (n < 4)
ant = 0;
while (p--)
{
cin >> ans;
long long nod[5];
if (ant)
{
int flag = 1;
for (int i = 0; i < n ; ++i)
{
if (b[i].x != ans)
{
nod[flag] = b[i].y;
++flag;
if (flag == 4)
{
if (nod[1] < nod[2] + nod[3])
{
off = 1;
break;
}
else
{
nod[1] = nod[2];
nod[2] = nod[3];
nod[3] = 0;
flag = 3;
}
}
}
}
}
if (ant&&off)
cout << nod[1] + nod[2] + nod[3] << endl;
else
cout << -1 << endl;
}
}
return 0;
}
一不小心,寫了69行,太長了,我不開心。等我看完代碼簡潔之道再優化吧。
牛客小白月賽4 A 三角形