首页 > 其他分享 >P5 UVA1308 Viva Confetti

P5 UVA1308 Viva Confetti

时间:2023-08-20 09:44:04浏览次数:28  
标签:Viva rad int back UVA1308 tag 圆弧 Confetti

这道题主要是去理解所谓的 "看得见" 的面积是怎么组成的。

对于每个露出来的面积,其实是由多个圆弧所组成的。是的,这就是为什么要以圆弧为引入点来解决此题的原因。

那该怎么找露出来的面积呢?题目有说,在一定范围内不影响答案,所以考虑找每个圆弧的中点,然后平移一点点距离,再从覆盖顺序看最上层盖住这个点的圆是谁,如果有盖住此点的圆,就说明这个圆是露出来的。

const int N=100;

int n;
Circle C[N];
bool tag[N];

inline int topmost(Point P){
  for(int i=n-1;i>=0;--i)
    if(dcmp(Length(C[i].c-P)-C[i].r)<0)
      return i;
  return -1;
}

signed main(){
  IOS
  while(cin>>n){
    if(!n) break;
    for(int i=0;i<n;++i)
      cin>>C[i].c.x>>C[i].c.y>>C[i].r;
    memset(tag,0,sizeof(tag));

    for(int i=0;i<n;++i){
      vector<double> rad;
      rad.push_back(0),rad.push_back(PI*2);
      for(int j=0;j<n;++j) GetCircleCircleIntersection(C[i],C[j],rad);//圆与圆交点(略)
      sort(All(rad));

      for(int j=0;j<rad.size()-1;++j){
        double mid=(rad[j]+rad[j+1])/2.0;
        for(int t=-1;t<=1;t+=2){
          double r2=C[i].r+t*eps;
          Circle K=C[i]; K.r=r2;//新圆
          Point pos=K.GetPoint(mid);//圆弧中点
          int jd=topmost(pos);
          if(jd>=0) tag[jd]=true;
        }
      }
    }

    int ans=0;
    for(int i=0;i<n;++i) ans+=tag[i];
    cout<<ans<<'\n';
  }
  
  return 0;
}

标签:Viva,rad,int,back,UVA1308,tag,圆弧,Confetti
From: https://www.cnblogs.com/mfc007/p/17643624.html

相关文章

  • 带你读论文丨S&P21 Survivalism: Living-Off-The-Land 经典离地攻击
    本文分享自华为云社区《[论文阅读](21)S&P21Survivalism:Living-Off-The-Land 经典离地攻击》,作者:eastmount。摘要随着恶意软件检测算法和方法变得越来越复杂(sophisticated),恶意软件作者也采用(adopt)同样复杂的逃避机制(evasionmechansims)来对抗(defeat)它们。民间证据表明离......
  • 使用 Vivado 项目进行版本控制
    转发一篇别人的文章:RevisionControlwithaVivadoProject(xilinx.com) 部分截图: ......
  • vivado生成Bitstream报错[Vivado 12-1345] Error(s) found during DRC. Bitgen not ru
    写了一个很简单的程序,2-4译码器。moduledecoder2to4(inputin1,in0,outputreg[3:0]out);always@(*)beginif({in1,in0}==2'b00)out=4'b1111;elseif({in1,in0}==2'b01)out=4......
  • FPGA vivado quartus 设置外挂 编辑器
     1.vivado   tools->settings->editor ->customeditor... C:\\pg\\MicrosoftVSCodeInsiders\\Code-Insiders.exe[filename]  2.quartus tools->options->preferredtexteditortexteditor:custom command-line:"C:\pg\M......
  • 【Implementation】Vivado增量编译:加速FPGA设计实现
    一、Vivado增量编译概述Vivado增量编译(IncrementalImplementation),是指针对设计中已经完成的部分,仅编译修改的部分,并在这些部分重新生成比特流,以加速设计实现的过程。简单来说,就是只更新那些被修改过的代码,而不是每次都对整个设计进行重新编译。与传统的完全重新编译相比,Vivado......
  • 【Implementation】Vivado实现参数设置
    实现(Implementation)是FPGA设计中至关重要的环节之一。implementation是一个place和route的过程,也就是布局布线。综合后生成的门级网表只是表示了门与门之间虚拟的连接关系,并没有规定每个门的位置以及连线的长度等。布局布线就是一个将门级网表中的门的位置以及连线信息确定下来......
  • 【Synthesis】Vivado综合参数设置
    一、Vivado综合参数介绍在Vivado中,默认情况下,综合器会根据指定的目标芯片和设定的优化策略来产生最优的电路实现方案。常用的选项都可以在下图菜单中设置。1、flatten_hierarchy这个参数决定了Vivado综合工具将如何控制层次结构,一般默认为rebuilt,主要有以下3个参数选项:(1)full......
  • 【IP】vivado中IP核的Core Container特性
    一、XCI和XCIX格式文件在Vivado中生成IP核时,一般默认是对应的IP核文件夹会生成在工程目录的.srcs/sources_1/ip路径下。这个文件夹包含了所有与该IP核相关的文件,最主要的是XCI文件,其中包含了用户配置的相关信息。 Vivado还提供了CoreContainer特性,可以将所有与IP相关的文件......
  • Vivado全版本下载分享
    Vivado是由Xilinx公司开发的一款用于FPGA设计和开发的综合设计环境。它包括了高层次综合(HLS)、逻辑设计、约束管理、IP核管理、仿真、综合、实现和调试等功能,支持面向最新FPGA器件的设计。这里分享一下Vivado的电脑安装配置推荐,以及​各版本Vivado下载链接。​一、电脑配置推荐......
  • Vivado2019.2下载(官网&百度云)与安装(手把手)
    龙芯杯对于vivado版本的要求:VivadoDesignSuiteHLWebPACK™版是革命性设计套件的免费版本。我们用它,能满足龙芯杯的需要,而且不用license区别如下:下载地址记得创建xilinx账号或者登陆!!!第一个是指下载一个exe之后,点击这个exe进行在线安装第二个是指把20几G的软件全部下到本地......