2016夏季练习——三分
2016-07-15 16:55
239 查看
来源:POJ3301
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int n;
const int MAXN = 35;
const double PI=acos(-1);
const double eps = 1e-8;
const double op = (sqrt(5)-1)/2;
const double INF = (~0U>>2);
struct Node{
double x,y;
};
Node p[MAXN];
Node rotate(Node p ,double rad){
Node pp;
pp.x=cos(rad)*p.x-sin(rad)*p.y;
pp.y=p.y*cos(rad)+p.x*sin(rad);
return pp;
}
/*inline double grad(double st,double en)
{
return st+op*(en-st);
}*/
double calc(double rad){
double minx=INF;
double miny=INF;
double maxx=-INF;
double maxy=-INF;
Node pp;
for(int i=0;i<n;i++){
pp=rotate(p[i],rad);
minx=min(minx,pp.x);
miny=min(miny,pp.y);
maxx=max(maxx,pp.x);
maxy=max(maxy,pp.y);
}
return max(maxx-minx,maxy-miny);
}
bool judge(double rad1,double rad2){
//cout<<"judge: "<<calc(rad1)<<" "<<calc(rad2)<<endl;
return calc(rad1)>calc(rad2);
}
int main(){
int T;
/*cout<<(~0U>>2)<<endl;
return 0;*/
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%lf%lf",&p[i].x,&p[i].y);
//cout<<p[i].x<<" "<<p[i].y<<endl;
}
double left=0;
double right=PI/2;
double mid=(left+right)/2;
double midmid=(mid+right)/2;
while(abs(mid-midmid)>eps){
mid=(left+right)/2;
midmid=(right+mid)/2;
//cout<<left<<" "<<midmid<<" "<<mid<<" "<<right<<endl;
if(judge(mid,midmid)){
left=mid;
}
else{
right=midmid;
}
}
//cout<<"mid: "<<mid<<" "<<calc(mid)<<endl;
printf("%.2f\n",(calc(mid)*calc(mid)));
}
return 0;
}
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int n;
const int MAXN = 35;
const double PI=acos(-1);
const double eps = 1e-8;
const double op = (sqrt(5)-1)/2;
const double INF = (~0U>>2);
struct Node{
double x,y;
};
Node p[MAXN];
Node rotate(Node p ,double rad){
Node pp;
pp.x=cos(rad)*p.x-sin(rad)*p.y;
pp.y=p.y*cos(rad)+p.x*sin(rad);
return pp;
}
/*inline double grad(double st,double en)
{
return st+op*(en-st);
}*/
double calc(double rad){
double minx=INF;
double miny=INF;
double maxx=-INF;
double maxy=-INF;
Node pp;
for(int i=0;i<n;i++){
pp=rotate(p[i],rad);
minx=min(minx,pp.x);
miny=min(miny,pp.y);
maxx=max(maxx,pp.x);
maxy=max(maxy,pp.y);
}
return max(maxx-minx,maxy-miny);
}
bool judge(double rad1,double rad2){
//cout<<"judge: "<<calc(rad1)<<" "<<calc(rad2)<<endl;
return calc(rad1)>calc(rad2);
}
int main(){
int T;
/*cout<<(~0U>>2)<<endl;
return 0;*/
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%lf%lf",&p[i].x,&p[i].y);
//cout<<p[i].x<<" "<<p[i].y<<endl;
}
double left=0;
double right=PI/2;
double mid=(left+right)/2;
double midmid=(mid+right)/2;
while(abs(mid-midmid)>eps){
mid=(left+right)/2;
midmid=(right+mid)/2;
//cout<<left<<" "<<midmid<<" "<<mid<<" "<<right<<endl;
if(judge(mid,midmid)){
left=mid;
}
else{
right=midmid;
}
}
//cout<<"mid: "<<mid<<" "<<calc(mid)<<endl;
printf("%.2f\n",(calc(mid)*calc(mid)));
}
return 0;
}
相关文章推荐
- synchronized (syncObj)
- 广告点击率预测-项目介绍
- 第二篇博客,看来以后要每天一篇的样子呢!
- POJ 2796 Feel Good(并查集)
- Java多线程用法
- 二叉查找树、B-树、B+树、B*树
- uwsgi安装过程中遇到的问题
- oracle database link使用说明
- 利用GPU加速的软件
- 关于正则表达式
- Observer观察者模式
- 快捷的办法找到并删除 Xcode 工程中没用到的图片
- android加载网络图片,并下载
- java string类型转换boolean类型
- eclipse 创建maven项目设置默认jdk版本
- ubuntu 下安装lua语言
- 【Leetcode206】 Reverse Linked List
- Codeforces Round #362 (Div. 2) C. Lorenzo Von Matterhorn(暴力)
- cuda 安装方法
- oracle数据库客户端无法分发数据库连接