• 小白月赛4 A 三角形


    传送门

    题目大意是,给你n个棍子,然后由q次操作,每次操作都是把编号为x的棍子拿走(每次操作都是针对n个棍子进行操作),然后问你此时这n-1根棍子能不能组成三角形,能的话输出最长的三角形周长,不能的话输出-1。

    思路:要用贪心做,先给n条边按降序排序,这里注意要定义一个结构体,id存这条边排序前的位置(因为这里x是排序之前的位置),len存长度。排位序后,从第一长的边往后面扫,每次取连续的三条边,如果满足第一长的边的长度小于第二长的边的长度+第三长的边的长度,则这三条边的长度就是n-1根棍子组成三角形的最长周长了。如果扫完了,还是没遇到能构成三角形的三条边则说明这n-1条棍子不能组成三角形。

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 100005
    struct node
    {
        int id;
        long long len;
    
    }a[maxn];
    int n,q;
    bool cmp(const struct node&a,const struct node&b)
    {
        return a.len>b.len;
    }
    int main()
    {
        scanf("%d%d",&n,&q);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&a[i].len);
            a[i].id=i;
        }
        sort(a+1,a+n+1,cmp);
        long long flag,maxx,x;
        while(q--)
        {
    
            maxx=-1;
            scanf("%lld",&x);
            for(int i=1;i<=(n-2);i++)
            {
                int f,g,h;
                if(a[i].id==x)//用if嵌套找三条边里是否存在被顺溜拿走的边
                {
                    continue;
                }
                else
                    if(a[i+1].id==x)
                    {
                        f=i;
                        g=i+2;
                        h=i+3;
                    }
                    else
                        if(a[i+2].id==x)
                        {
                            f=i;
                            g=i+1;
                            h=i+3;
    
                        }
                        else
                        {
                            f=i;
                            g=i+1;
                            h=i+2;
                        }
                if(a[f].len<(a[g].len+a[h].len))
                {
    
                    maxx=(a[f].len+a[g].len+a[h].len);
                    break;
                }
            }
    
            printf("%lld
    ",maxx);
        }
        return 0;
    
    }
    

  • 相关阅读:
    ext2文件系统
    可变宏
    SPI—读写串行 FLASH
    使用命令
    FreeRtos——任务删除,改变任务优先级
    FreeRTOSConfig 配置文件详解
    FreeRtos——空闲任务与空闲任务钩子函数
    Elasticsearch从入门到精通-Elasticsearch是什么
    kibana从入门到精通-Kibana安装
    kibana从入门到精通-Kibana配置详解
  • 原文地址:https://www.cnblogs.com/eason9906/p/11755095.html
Copyright © 2020-2023  润新知