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