题解:P13467 [GCJ 2008 #2] Triangle Areas
题目传送门
题目分析
一道比较考察思维能力的题。
首先给出几个显而易见而十分重要的事实:
- 三角形平移后面积不变。
- 三角形某个顶点沿与其对边平行的方向平移,三角形面积不变(等底等高)。
由上面两条事实可以发现,对于钝角三角形,根据第二条事实,平移某个顶点使其成为锐角三角形,然后根据第一条事实,可以把三角形平移使得某个顶点位于原点。因此可以将三角形的一个顶点锁定在
如图,蓝色三角形就是我们变换后最终想要的三角形,而黄色三角形由于是钝角三角形,
如图,这张图片展示了如何从钝角三角形变为锐角三角形。图中
对于一般三角形,若顶点
由于我们把某一点(设为
设
首先验证
然后验证
下面看什么时候无解,显然就是
以上就解决了这道题。
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
for(int o=1;o<=t;o++){
cout<<"Case #"<<o<<": ";
long long n,m,a;
cin>>n>>m>>a;
if(a>m*n){
cout<<"IMPOSSIBLE"<<endl;
continue;
}
cout<<0<<' '<<0<<' ';
long long m0=0;
for(long long i=0;i<=m;i++){
if(n*(m-i)>=a&&n*(m-i-1)<a){
m0=i;
break;
}
}
cout<<n<<' '<<1<<' '<<(m-m0)*n-a<<' '<<m-m0<<endl;
}
return 0;
}