Link:

Codeforces #172 传送门

A:

一眼看上去分两类就可以了

1、每个矩形只有两条边相交,重合的形状为菱形

2、每个矩形四条边都有相交

对于情况1答案为$h*h/sin(a)$

对于情况2可以列出一个二元一次方程组,手动解一下就好了

 

不过计算几何确实容易写挂啊……

有几个注意点:

1、对于情况1$h$指的是较短的边,不符合时要交换$w,h$

以后处理长方形时还是要注意,不能只看样例啊

2、在判断情况1,2的临界点时用$sin$来判断,因为此时$a$已经全转为锐角了

#include <bits/stdc++.h>

using namespace std;
#define X first
#define Y second
#define PI M_PI
typedef long long ll;
typedef pair<int,int> P;
double w,h,a,x,y,res;

int main()
{
    scanf("%lf%lf%lf",&w,&h,&a);
    if(!a||a>=180) return printf("%.9lf",w*h),0;    
    if(a>90) a=180-a;
    if(h>w) swap(w,h);//情况1要求h是短边 
    a=a*PI/180;
    if(sin(a)>=sin(2*atan2(w,h)))//由于角度已改变,用sin判断 
        res=h*h/sin(a);
    else
        y=(h*(cos(a)+1)-w*sin(a))/((cos(a)+1)*(cos(a)+1)-sin(a)*sin(a)),
        x=(h-y*(cos(a)+1))/sin(a),res=w*h-(x*x+y*y)*sin(a)*cos(a);
    printf("%.9lf",res);
    return 0;
}
Problem A

相关文章:

  • 2022-02-21
  • 2022-01-10
  • 2021-11-15
  • 2021-08-20
  • 2022-02-09
  • 2021-10-30
  • 2021-06-06
  • 2022-01-05
猜你喜欢
  • 2022-01-30
  • 2022-01-02
  • 2021-05-31
  • 2021-10-22
  • 2022-01-28
  • 2021-11-19
  • 2021-11-07
相关资源
相似解决方案