当前位置: 首页 > news >正文

网站运行维护/上海搜索引擎优化seo

网站运行维护,上海搜索引擎优化seo,传媒公司起名,微信平台公众号开发Description有n个圆盘从天而降,后面落下的可以盖住前面的。求最后形成的封闭区域的周长。看下面这副图, 所有的红色线条的总长度即为所求.Inputn ri xi y1 ... rn xn ynOutput最后的周长,保留三位小数Sample Input21 0 01 1 0Sample Output10.472数据规模…

Description

有n个圆盘从天而降,后面落下的可以盖住前面的。求最后形成的封闭区域的周长。看下面这副图, 所有的红色线条的总长度即为所求.
Input

n ri xi y1 ... rn xn yn
Output

最后的周长,保留三位小数
Sample Input
2
1 0 0
1 1 0
Sample Output
10.472

数据规模
n<=1000

 

 

调了一晚上外加下午(弱菜写计算几何,tan函数都抄错了)

对每一个圆计算覆盖区间,然后排序,再区间合并,注意范围,我是全部弄到0到2π里

再膜拜一下z55250825,最后还是他看出错误来的

 

  1 uses math;
  2 const
  3     maxn=1010;
  4     eps=1e-7;
  5 var
  6     r,x,y,ll,rr:array[0..maxn*2]of double;
  7     n,tot:longint;
  8     ans:double;
  9 
 10 procedure init;
 11 var
 12     i:longint;
 13 begin
 14     read(n);
 15     for i:=1 to n do
 16       read(r[i],x[i],y[i]);
 17 end;
 18 
 19 function angle(a,b,c:double):double;
 20 begin
 21     exit(arccos((a*a+b*b-c*c)/(2*a*b)));
 22 end;
 23 
 24 function tan(x,y:double):double;
 25 var
 26     a:double;
 27 begin
 28     if abs(x)<eps then
 29     begin
 30       if y>-eps then exit(pi/2)
 31       else exit(pi*3/2);
 32     end;
 33     if abs(y)<eps then
 34     begin
 35       if x>-eps then exit(0)
 36       else exit(pi);
 37     end;
 38     a:=arctan(y/x);
 39     if a<-eps then a:=-a;
 40     if x>-eps then
 41       if y>-eps then exit(a)
 42       else exit(2*pi-a)
 43     else
 44       if y>-eps then exit(pi-a)
 45       else exit(pi+a);
 46 end;
 47 
 48 procedure swap(var x,y:double);
 49 var
 50     t:double;
 51 begin
 52     t:=x;x:=y;y:=t;
 53 end;
 54 
 55 procedure sort(l,r:longint);
 56 var
 57     i,j:longint;
 58     y:double;
 59 begin
 60     i:=l;
 61     j:=r;
 62     y:=ll[(l+r)>>1];
 63     repeat
 64       while ll[i]+eps<y do
 65         inc(i);
 66       while ll[j]>y+eps do
 67         dec(j);
 68       if i<=j then
 69       begin
 70         swap(ll[i],ll[j]);
 71         swap(rr[i],rr[j]);
 72         inc(i);
 73         dec(j);
 74       end;
 75     until i>j;
 76     if i<r then sort(i,r);
 77     if l<j then sort(l,j);
 78 end;
 79 
 80 procedure work;
 81 var
 82     i,j:longint;
 83     d,a,b,sum,xx,yy:double;
 84     cover:boolean;
 85 begin
 86     for i:=1 to n do
 87       begin
 88         tot:=0;
 89         cover:=false;
 90         for j:=i+1 to n do
 91           begin
 92             d:=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
 93             if (r[i]+r[j]-d<eps)or(d+r[j]-r[i]<eps) then continue;
 94             if d+r[i]-r[j]<eps then
 95             begin
 96               cover:=true;
 97               break;
 98             end;
 99             a:=tan(x[j]-x[i],y[j]-y[i]);
100             b:=angle(d,r[i],r[j]);
101             inc(tot);
102             ll[tot]:=a-b;
103             rr[tot]:=a+b;
104             if ll[tot]<-eps then
105             begin
106               ll[tot+1]:=2*pi+ll[tot];
107               rr[tot+1]:=2*pi;
108               ll[tot]:=0;
109               inc(tot);
110             end;
111             if rr[tot]>2*pi+eps then
112             begin
113               rr[tot+1]:=rr[tot]-2*pi;
114               ll[tot+1]:=0;
115               rr[tot]:=2*pi;
116               inc(tot);
117             end;
118           end;
119         if cover then continue;
120         sort(1,tot);
121         inc(tot);
122         ll[tot]:=100;
123         rr[tot]:=100;
124         sum:=0;
125         xx:=0;
126         yy:=0;
127         for j:=1 to tot do
128           if ll[j]+eps<=yy then
129           begin
130             if rr[j]+eps<=yy then continue;
131             yy:=rr[j];
132           end
133           else
134           begin
135             sum:=sum+yy-xx;
136             xx:=ll[j];
137             yy:=rr[j];
138           end;
139         ans:=ans+(2*pi-sum)*r[i];
140       end;
141     write(ans:0:3);
142 end;
143 
144 begin
145     init;
146     work;
147 end.
View Code

 

转载于:https://www.cnblogs.com/Randolph87/p/3617641.html

http://www.jmfq.cn/news/5277583.html

相关文章:

  • 义乌建设局网站/seo排名点击首页
  • 建设网站企业网银登录/推广策划方案
  • 湖南英文网站建设/网站及搜索引擎优化建议
  • 如何做网站授权/企业网络营销策略分析
  • 嘉兴市城乡规划建设管理委员会网站/怎么做优化
  • 东营网站推广/网络广告营销方案
  • 做公益筹集项目的网站/企业网站的优化建议
  • 如何给网站做排名优化/东莞疫情最新数据
  • 自己做的网站怎么传入外网/凡科建站和华为云哪个好
  • 网站开发会计分录/公司如何做网络推广营销
  • 做铁艺需要什么网站/刷关键词怎么刷
  • 网站外包项目/百度左侧排名
  • app界面设计属于什么设计/玉溪seo
  • 新浪军事 手机新浪网/沈阳关键词快照优化
  • 网站建设需求报告/新乡网站优化公司推荐
  • 做水果网站首页的图片素材/百度推广账号怎么申请
  • 公司网站建设发票能抵扣不/东莞seo外包公司哪家好
  • 在线做静态头像的网站/公司网站建设需要注意什么
  • 监控视频怎么做直播网站/中国国家培训网官网查询
  • 四川省建筑信息平台/成都网站关键词推广优化
  • 昆明哪个公司做网站建设最好/怎么创建一个网址
  • 宣讲家网站两学一做/商务软文写作300字
  • 在什么文件中加入什么代码告诉搜索引擎蜘蛛网站地图的文件位置?/网站优化网站优化
  • 网站信息服务费怎么做凭证/安徽搜索引擎优化seo
  • 建网站需要多少钱2017/信息推广
  • 北京网站建设升上去/杭州网站
  • 传奇网页游戏开服/sem和seo是什么职业岗位
  • 平面网页设计培训/seo优化厂商
  • 北京pk10网站建设/seo网络推广是干嘛的
  • 南通网站建设公司排名/谷歌浏览器app