zoukankan      html  css  js  c++  java
  • 牛客小白赛4 A 三角形 数学

    链接:https://www.nowcoder.com/acm/contest/134/A
    来源:牛客网

    题目描述

    铁子从森林里收集了n根木棍,她开始将它们按顺序的排成一排,从左到右依次为1到n,她回想起
    在数学课上老师教她的三角形知识,她开始从这些木棍中间找三根木棍来组成一个周长最大的三角形,
    这时她的兄弟顺溜偷偷的溜了过来,偷走了第i根木棍,现在她想知道现在能够组成周长最大的三角形
    的周长是多少?

    输入描述:

    第一行两个整数n和q。(1 ≤ n, q ≤ 105)
    第二行n个整数表示第i根木棍的长度ai。(1 ≤ ai ≤ 109)
    接下来q行,每行一个整数表示被顺溜偷走的木棍编号。注意每行的事件是独立的,也就是说每一次操作都是对于原来的n根木棍进行的。
     

    输出描述:

    对于每个询问输出一行表示答案,如果删除木棍后无法组成三角形则输出 -1 。
    示例1

    输入

    复制
    6 2
    1 2 3 4 5 6
    6
    5

    输出

    复制
    12
    13

    分析:要求三角形周长最大,则首先满足的是三边中任意两边之和大于第三边,然后我们知道如果这三边满足一个三角形肯定是最大的三边在一起周长才最大
      所以我们直接排序所有边记录下编号,然后除去问的编号枚举出最大的满足构成三角形的三边就行了
    AC代码:
    #include <map>
    #include <set>
    #include <stack>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <vector>
    #include <string>
    #include <bitset>
    #include <cstring>
    #include <iomanip>
    #include <iostream>
    #include <algorithm>
    #define ls (r<<1)
    #define rs (r<<1|1)
    #define debug(a) cout << #a << " " << a << endl
    using namespace std;
    typedef long long ll;
    const ll maxn = 1e5+10;
    const ll mod = 998244353;
    const double pi = acos(-1.0);
    const double eps = 1e-8;
    struct node {
        ll id, num;
    };
    bool cmp( node p, node q ) {
        return p.num > q.num;
    }
    node a[maxn];
    int main() {
        ios::sync_with_stdio(0);
        ll n, m, x;
        cin >> n >> m;
        for( ll i = 0; i < n; i ++ ) {
            cin >> a[i].num;
            a[i].id = i+1;
        }
        sort(a,a+n,cmp);
        while( m -- ) {
            cin >> x;
            ll cnt = 0, ans = 0;
            bool flag = false;
            for( ll i = 0; i < n; i ++ ) {
                if( a[i].id != x ) {
                    ans += a[i].num;
                    cnt ++;
                } 
                if( cnt == 3 ) {
                    if( a[i].num + a[i-1].num > a[i-2].num ) {
                        cout << ans << endl;
                        flag = true;
                        break;
                    } else {
                        ans -= a[i-2].num, cnt --;
                    }
                }
            }
            if( !flag ) {
                cout << -1 << endl;
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    ambari
    linux常用命令
    scala新版本学习(3)
    Spring中的AOP
    Spring中的Bean
    Spring的基本应用(1):依赖以及控制反转
    Scala新版本学习(2):
    python之time模块
    python之编码与解码
    爬虫之re数据提取的使用
  • 原文地址:https://www.cnblogs.com/l609929321/p/9532019.html
Copyright © 2011-2022 走看看