比赛链接:https://ac.nowcoder.com/acm/contest/5531
A:https://ac.nowcoder.com/acm/contest/5531/A
题意:给你n个数,问你能不能在其中任选三个组成一个三角形,如果能组成(不论组成几个三角形),输出任意一个三角形的三个边,如果一个都不能组成,输出No solution。
思路:首先回忆组成三角形的条件“两边之和大于第三边”,于是思路就出来了,用数组把这n个数存下,然后排序,然后把从第一个元素开始枚举,将它和它后面的两个数拿出来看看,看能不能组成三角形,可以就输出出来。如果第n-2个都不行,就输出No solution,至此代码就写出来了。

//author CN.TTDragon
#include<bits/stdc++.h>
typedef long long ll;
const ll mod=1e9+7;
const ll maxn=1e5+7;
const double pi=acos(-1);
using namespace std;
int main()
{
    int n;
    cin>>n;
    ll a[n];
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    sort(a,a+n);//排序
    for(int i=0;i<n-2;i++)
    {
        //两边之和大于第三边
        if(a[i]+a[i+1]>a[i+2])
        {
            cout<<a[i]<<" "<<a[i+1]<<" "<<a[i+2]<<endl;
            return 0;//题目要求随意一个,输出了就结束程序。
        } 
    }
    cout<<"No solution"<<endl;
     return 0;
}

B:https://ac.nowcoder.com/acm/contest/5531/B
题意:有一个两直角边为H,L的直角三角形,将L边放在地面上,又在斜面上放一个长为l ,宽为1,高为h的鱼缸,问你这个鱼缸现在能放多少水。
思路:先想放在水平面上的时候,V=l1h。在放置到三角形上后,由于两个侧面板(宽,高)不在同一水平面上的缘故,水就漏出去了,很容易知道,水面一定是和水平面平行的(废话)结合题目所给的图,就知道了一个关键不变量,仔细一看,这个关键不变量正是H/L。再细看,会发现存在两种情况,那就是h/l与H/L的大小关系不同时,会出现不同的答案。
可以用以下这幅图来理解
图片说明

//author CN.TTDragon
#include<bits/stdc++.h>
typedef long long ll;
const ll mod=1e9+7;
const ll maxn=1e5+7;
const double pi=acos(-1);
using namespace std;
int main()
{
    double h,l,H,L;
    cin>>h>>l>>H>>L;
    double a;//a的意义见图
    a=h*L/H;
    if(a<=l)
    {
        printf("%0.6lf",1.0/2*h*a);
    }
    else
    {
        double s=1.0/2*h*a;
        printf("%0.6lf",s-s*((a-l)/a)*((a-l)/a));
    }
     return 0;
}