bzoj2829
裸题,直接上凸包,然后加上一个圆周即可
只是在这之前没写过旋转而已
const pi=3.14159265358979323;
eps=1e-8;
type point=record
x,y:double;
end; var p:array[..] of point;
q:array[..] of longint;
n,i,k,t:longint;
ans,a,b,x,y,an,r:double; procedure swap(var a,b:point);
var c:point;
begin
c:=a;
a:=b;
b:=c;
end; function cmp(a,b:point):boolean;
begin
if abs(a.x-b.x)<eps then exit(a.y<b.y);
exit(a.x<b.x);
end; procedure sort(l,r:longint);
var i,j:longint;
x:point;
begin
i:=l;
j:=r;
x:=p[(l+r) shr ];
repeat
while cmp(p[i],x) do inc(i);
while cmp(x,p[j]) do dec(j);
if not(i>j) then
begin
swap(p[i],p[j]);
inc(i);
dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end; function cross(i,j,k:longint):double;
begin
exit((p[i].x-p[k].x)*(p[j].y-p[k].y)-(p[j].x-p[k].x)*(p[i].y-p[k].y));
end; function dis(i,j:longint):double;
begin
exit(sqrt(sqr(p[i].x-p[j].x)+sqr(p[i].y-p[j].y)));
end; function get(x,y,x0,y0:double):point;
begin
get.x:=cos(an)*x-sin(an)*y+x0;
get.y:=sin(an)*x+cos(an)*y+y0;
end; begin
readln(n);
readln(b,a,r);
a:=a-*r;
b:=b-*r;
for i:= to n do
begin
readln(x,y,an);
inc(t); p[t]:=get(a/,-b/,x,y);
inc(t); p[t]:=get(a/,b/,x,y);
inc(t); p[t]:=get(-a/,b/,x,y);
inc(t); p[t]:=get(-a/,-b/,x,y);
end;
sort(,t);
n:=t;
t:=;
q[]:=;
for i:= to n do
begin
while (t>) and (cross(i,q[t],q[t-])>=-eps) do dec(t);
inc(t);
q[t]:=i;
end;
k:=t;
for i:=n- downto do
begin
while (t>k) and (cross(i,q[t],q[t-])>=-eps) do dec(t);
inc(t);
q[t]:=i;
end;
for i:= to t do
ans:=ans+dis(q[i],q[i-]); writeln(ans+*r*pi::);
end.
bzoj2829的更多相关文章
- 【BZOJ2829】[SHOI2012]信用卡凸包(凸包)
[BZOJ2829][SHOI2012]信用卡凸包(凸包) 题面 BZOJ 洛谷 题解 既然圆角的半径都是一样的,而凸包的内角和恰好为\(360°\),所以只需要把圆角的圆心弄下来跑一个凸包,再额外加 ...
- [BZOJ2829] 信用卡 (凸包)
[BZOJ2829] 信用卡 (凸包) 题面 信用卡是一个矩形,唯四个角做了圆滑处理,使他们都是与矩形两边相切的1/4园,如下图所示,现在平面上有一些规格相同的信用卡,试求其凸包的周长.注意凸包未必是 ...
- BZOJ2829信用卡凸包——凸包
题目描述 输入 输出 样例输入 2 6.0 2.0 0.0 0.0 0.0 0.0 2.0 -2.0 1.5707963268 样例输出 21.66 提示 本样例中的2张信用卡的轮廓在上图中用实线标出 ...
- 2019.02.21 bzoj2829: 信用卡凸包(凸包)
传送门 题意:给nnn个A∗BA*BA∗B的矩形,其中每个矩形的四个角被改造成了半径为rrr的四分之一 圆,问这些矩形的凸包周长. 思路:考虑求出圆心的凸包周长然后加上一个整圆的周长,证明很简单,略掉 ...
- 【bzoj2829】信用卡凸包 凸包
题目描述 输入 输出 样例输入 26.0 2.0 0.00.0 0.0 0.02.0 -2.0 1.5707963268 样例输出 21.66 题解 凸包 傻逼题,答案显然为:所有圆心构成的凸包周长+ ...
- 【计算几何】【凸包】bzoj2829 信用卡凸包
http://hzwer.com/6330.html #include<cstdio> #include<cmath> #include<algorithm> us ...
- Bzoj2829 信用卡凸包
Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 333 Solved: 155 Description Input ...
- BZOJ-2829 信用卡凸包
凸包题. 我们先把所有信用卡的四个定点的坐标求出来,然后计算凸包长度,最后加上一个圆的周长就行. #include <cstdlib> #include <cstdio> #i ...
- [转载]hzwer的bzoj题单
counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ120 ...
随机推荐
- 使用GitHub建立自己的个人主页
1.建仓库 在自己的库里建一个hujun123qwe.github.io的库 即可以使用这个名字当网址访问. 2.写内容 在库里建一个首页文件 index.html 这个个人主页只支持静态的内容,像p ...
- bitmap缩放时抗锯齿
bitmap在进行放大缩小的时候经常会出现边缘锯齿的情况,通常的解决办法是在Paint中加入抗锯齿, paint.setAntiAlias(true); 但是有时候发现这并没有起到抗锯齿的作用,这是可 ...
- java 获取获取字符串编码格式
public static String getEncoding(String str) { String encode = "GB2312"; try { if (str.equ ...
- Centos——rpm和yum
间歇性的学习了centos的一些使用,发现一段时间不操作,就会忘掉其中的概念或者操作方式方法,于是在此总结一下. 一.问题描述 首先,把一个我最常忘记的概念性的东西在这里记录一下: 什么是yum,什么 ...
- Window 2008 R2 + IIS7.5 + VS2013 错误代码 0x80070002
HTTP 错误 404.0 - Not Found 您要找的资源已被删除.已更名或暂时不可用.详细错误信息模块 IIS Web Core通知 MapRequest Handler处理程序 Static ...
- 对于WIFI版ipad(无GPS芯片)定位功能的释疑
把玩ipad(WIFI版ipad,无GPS芯片)很久时间了,曾今有很多人(包括我)也用过它的定位功能,发现它确实很准确,通常的误差在40米以内,所以很多人都怀疑这个版本的ipad是不是真的内置了GPS ...
- Android 问题流水总结
先来一篇环境搭建的博客 这些都是大同小异. http://blog.csdn.net/yzhj2005/article/details/6980676 http://blog.csdn.net/wan ...
- HDU 1301 Jungle Roads (最小生成树,基础题,模版解释)——同 poj 1251 Jungle Roads
双向边,基础题,最小生成树 题目 同题目 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<stri ...
- hdu 2102 A计划(BFS,基础)
题目 //要仔细写的BFS,着重对#穿越的处理哦: //花了几个小时终于把这道简单的BFS给弄好了,我果然还需要增加熟练度,需要再仔细一些: //代码有点乱,但我不想改了,,,,, #include& ...
- 源代码管理工具TFS2013安装与使用【转载】
本文来源:博客园:http://www.cnblogs.com/suxinlcq/p/3956930.html 作者:suxin 最近公司新开发一个项目要用微软的TFS2013进行项目的源代码管理,以 ...