比赛链接: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;
}

京公网安备 11010502036488号