1. 程式人生 > >牛客小白月賽4 A 三角形

牛客小白月賽4 A 三角形

() 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 三角形