poj 3525

多邊形內最大半徑圓。

哇沒有枉費了我自閉了這么些天,大概五天前我看到這種題可能毫無思路抓耳撓腮舉手投降什么的,現在已經能1A了哇。

還是先玩一會計算幾何,刷個幾

嗯這個半平面交+二分就闊以解決。雖然隊友說他施展三分套三分*****

想象一下,如果一個多邊形能放進去半徑為r的圓,那么在每條邊向里平移r之后,他的內核一定不為空。

所以我們可以二分r,然后求半平面交,平移操作其實很好處理。

1A了很開森,去快樂的玩耍惹。

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <algorithm>
  4 #include <vector>
  5 #include <cmath>
  6 #include <deque>
  7 using namespace std;
  8 typedef double db;
  9 const db eps=1e-6;
 10 const db pi=acos(-1);
 11 int sign(db k){
 12     if (k>eps) return 1; else if (k<-eps) return -1; return 0;
 13 }
 14 int cmp(db k1,db k2){return sign(k1-k2);}
 15 struct point{
 16     db x,y;
 17     point operator + (const point &k1) const{return (point){k1.x+x,k1.y+y};}
 18     point operator - (const point &k1) const{return (point){x-k1.x,y-k1.y};}
 19     point operator * (db k1) const{return (point){x*k1,y*k1};}
 20     point operator / (db k1) const{return (point){x/k1,y/k1};}
 21     db abs(){return sqrt(x*x+y*y);}
 22     point unit(){db w=abs(); return point{x/w,y/w};}
 23     point turn90(){ return point{-y,x};}
 24     db getP()const { return sign(y)==1||(sign(y)==0&&sign(x)==-1);}
 25 };
 26 db cross(point k1,point k2){ return k1.x*k2.y-k1.y*k2.x;}
 27 db dot(point k1,point k2){ return k1.x*k2.x+k1.y*k2.y;}
 28 db rad(point k1,point k2){ return atan2(cross(k1,k2),dot(k1,k2));}
 29 int compareangle(point k1,point k2){
 30     return k1.getP()<k2.getP()||(k1.getP()==k2.getP()&&sign(cross(k1,k2))>0);
 31 }
 32 point getLL(point k1,point k2,point k3,point k4){
 33     db w1=cross(k1-k3,k4-k3),w2=cross(k4-k3,k2-k3);
 34     return (k1*w2+k2*w1)/(w1+w2);
 35 }
 36 struct line{
 37     point p[2];
 38     line(point k1,point k2){p[0]=k1;p[1]=k2;}
 39     point &operator[](int k){ return p[k];}
 40     int include(point k){ return sign(cross(p[1]-p[0],k-p[0])>0);}
 41     point dir(){ return p[1]-p[0];}
 42     line push(db eps){//向左手邊平移eps
 43         //const db eps=1e-6;
 44         point delta=(p[1]-p[0]).turn90().unit()*eps;
 45         return {p[0]-delta,p[1]-delta};
 46     }
 47 };
 48 point getLL(line k1,line k2){
 49     return getLL(k1[0],k1[1],k2[0],k2[1]);
 50 }
 51 int parallel(line k1,line k2){ return sign(cross(k1.dir(),k2.dir()))==0;}
 52 int sameDir(line k1,line k2){
 53     return parallel(k1,k2)&&sign(dot(k1.dir(),k2.dir()))==1;
 54 }
 55 int operator <(line k1,line k2){
 56     if(sameDir(k1,k2))return k2.include(k1[0]);
 57     return compareangle(k1.dir(),k2.dir());
 58 }
 59 int checkpos(line k1,line k2,line k3){ return k3.include(getLL(k1,k2));}
 60 vector<line> getHL(vector<line> &L){
 61     sort(L.begin(),L.end());deque<line> q;
 62     for(int i=0;i<L.size();i++){
 63         if(i&&sameDir(L[i],L[i-1]))continue;
 64         while (q.size()>1&&!checkpos(q[q.size()-2],q[q.size()-1],L[i]))q.pop_back();
 65         while (q.size()>1&&!checkpos(q[1],q[0],L[i]))q.pop_front();
 66         q.push_back(L[i]);
 67     }
 68     while (q.size()>2&&!checkpos(q[q.size()-2],q[q.size()-1],q[0]))q.pop_back();
 69     while (q.size()>2&&!checkpos(q[1],q[0],q[q.size()-1]))q.pop_front();
 70     vector<line> ans;for(int i=0;i<q.size();i++)ans.push_back(q[i]);
 71     return ans;
 72 }
 73 point p[1551];
 74 int n;
 75 bool cw(){//時針
 76     db s=0;
 77     for(int i=1;i<n-1;i++){
 78         s+=cross(p[i]-p[0],p[i+1]-p[0]);
 79     }
 80     return s>0;
 81 }
 82 vector<line> L,tmp;
 83 bool check(db x){
 84     tmp.clear();
 85     for(int i=0;i<L.size();i++){
 86         tmp.push_back(L[i].push(-x));
 87     }
 88     tmp = getHL(tmp);
 89     if(tmp.size()>=3)
 90         return true;
 91     return false;
 92 }
 93 int main(){
 94     //freopen("3525.in","r",stdin);
 95     while (scanf("%d",&n)&&n){
 96         for(int i=0;i<n;i++){
 97             scanf("%lf%lf",&p[i].x,&p[i].y);
 98         }
 99         if(!cw())reverse(p,p+n);
100         for(int i=0;i<n;i++){
101             L.push_back(line(p[i],p[(i+1)%n]));
102         }
103         db l = 0,r=100000.0;
104         while (l+0.0000001<r){
105             db mid = (l+r)/2;
106             if(check(mid))
107                 l=mid;
108             else
109                 r=mid;
110         }
111         printf("%.7f\n",l);
112         L.clear();
113     }
114 }
View Code

?

轉載于:https://www.cnblogs.com/MXang/p/10454111.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248449.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248449.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248449.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

尤雨溪對 2022 Web前端生態趨勢是這樣看的

文章目錄前言開發范式&底層框架方面趨勢基于依賴追蹤范式基于依賴追蹤范式—共同點基于編譯的響應式系統統一模型的優勢和代價基于編譯的運行是優化Vue Vapor Mode&#xff08;input&#xff09;工具鏈原生語言在前端工具鏈中的使用工具鏈的抽象層次基于 Vite 的上層框架上…

bzoj4919 [Lydsy1706月賽]大根堆

Description 給定一棵n個節點的有根樹&#xff0c;編號依次為1到n&#xff0c;其中1號點為根節點。每個點有一個權值v_i。你需要將這棵樹轉化成一個大根堆。確切地說&#xff0c;你需要選擇盡可能多的節點&#xff0c;滿足大根堆的性質&#xff1a;對于任意兩個點i,j&#xff0…

眾多mock工具,這一次我選對了

文章目錄寫在前面Mock介紹Mock能解決什么問題?傳統Mock解決方案Postman接口測試工具Mock js第三方庫Eolink解決方案全局Mock高級Mock返回結果Mock智能內置Mock智能自定義Mock約束條件MockEolink的Mock解決方案的優勢:寫在最后寫在前面 交戰之前&#xff0c;戰士必先利其兵器&…

高并發的理解和使用場景-----特意區別和多線程的關系

一&#xff0c;高并發的理解 1.概念&#xff1a;就是短時間內遇到大量操作請求&#xff0c;導致站點服務器/db服務器資源被占滿甚至嚴重時直接導致宕 2.影響&#xff1a;沒有做高并發預處理的系統會給用戶很差的體驗感&#xff1b; 3.系統好壞的衡量&#xff1a;衡量一個系統的…

async 和 await 原來這么簡單

前言 前端同學們可能都知道 async 和 await 的使用&#xff0c;當被面試官問到 async 和 await 的是什么&#xff1f;或者說一說你對 async、await 的理解&#xff1f;如果我們還是僅僅去闡述我是如何使用的就顯得格外的蒼白無力。今天博主就來帶大家進一步認識我們的 async 和…

研一寒假02-指針_new分配內存_使用new來創建動態數組_使用動態數組_使用delete來釋放new分配的內存...

#---------------------------------指針-----------------------------------# #include <iostream> int main(){ using namespace std; /* 指針引入 */ int updates 6; //聲明一個變量 int* p_updates; //聲明一個指針p_updates,該指針指向一個地址 p_updates&upd…

利用Windows內置工具winsat測試硬盤速度(SSD機械盤對比)

利用Windows內置工具winsat測試硬盤速度&#xff08;SSD&機械盤對比&#xff09; 以下是紅色內容是在命令行運行&#xff1a; C:\Users\Administrator>winsat diskWindows 系統評估工具> 正在運行: 功能枚舉 > 運行時間 00:00:00.00> 正在運行: 存儲評估 -seq …

我為何在 CSDN 樂在其中

文章目錄寫在前面成為博主究竟能得到什么&#xff1f;內在提升耀眼名片豐富眼界提升知名度博客》變現寫在最后寫在前面 各位伙伴大家好&#xff0c;我是幾何心涼&#xff0c;一位不是很大的也不是很小的博主&#xff0c;今天想要跟大家去聊一些比較實在的內容&#xff1b;大家能…

EFLinq查詢

1、無參數查詢var model db.Database.SqlQuery<UserInfo>("select* from UserInfoes ").ToList(); 2、有參查詢var model db.Database.SqlQuery<UserInfo>("select* from UserInfoes where idID ",new SqlParameter("ID",id)).ToL…

實現div可以調整高度(div實現resize)

實現div可以調整高度&#xff08;div實現resize&#xff09; 一、div 實現resize&#xff08;類似textarea&#xff09; 代碼如下&#xff1a; <!DOCTYPE html> <html><head><title>div實現textarea效果</title><style>#textarea {height:…

10分鐘設置免費遠程桌面

文章目錄前言遠程桌面設置教程啟動Amazon Lightsail實例配置遠程桌面啟動遠程桌面使用遠程桌面前言 “你見過洛杉磯凌晨4點的樣子嗎&#xff1f;” 沒有也沒關系&#xff0c;你可以輕松配置一臺位于洛杉磯的免費遠程桌面。 利用Amazon全球可用區&#xff0c;甚至可以在世界各…

樹莓派-開啟spi

1. sudo raspi-config #進入樹莓派配置頁 2. #進入每5項&#xff0c;進入啟用spi即可 轉載于:https://www.cnblogs.com/lobin/p/10459076.html

Lucene全文檢索過程

1. 索引過程&#xff1a; 1) 有一系列被索引文件 2) 被索引文件經過語法分析和語言處理形成一系列詞(Term)。 3) 經過索引創建形成詞典和反向索引表。 4) 通過索引存儲將索引寫入硬盤。 2. 搜索過程&#xff1a; 1) 用戶輸入查詢語句。 2) 對查詢語句經過語法分析和語言分析得到…

tcpdump 用法

原文鏈接 本文原文來自&#xff1a; A tcpdump Tutorial with Examples — 50 Ways to Isolate Traffic TCPDUMP 簡介 TCPDUMP 在一個界面中既提供了強大的功能又簡單易用&#xff0c;無疑已經是網絡分析工具中的老大。 本教程將介紹如何以各種方式隔離流量&#xff1a;從IP&am…

網絡端

1.synchronized 同步鎖 同步方法: 成員|靜態 簡單,但是鎖的范圍一般可能較大,效率低 同步塊 類的class:相當于鎖了類的整個信息|所有對象 this:鎖當前對象,鎖了這個對象的所有資源 資源:一般鎖不變的內容--對象地址 鎖的范圍太大效率低,鎖的范圍太小可能鎖不住 鎖一定要鎖不變的…

BZOJ2690: 字符串游戲(平衡樹動態維護Dfs序)

Description 給定N個僅有a~z組成的字符串ai,每個字符串都有一個權值vi,有M次操作&#xff0c;操作分三種&#xff1a;Cv x v:把第x個字符串的權值修改為vCs x a:把第x個字符串修改成aQ:求出當前的最大權字符串集合&#xff0c;使得這個集合中的字符串經過重新排列后滿足除最后一…

【第一趴】初探uni-app(uni-app發行者、uni-app推出背景、為什么選擇uni-app)

文章目錄寫在前面DCloud當下跨平臺開發存在的問題為什么選擇uni-app寫在最后寫在前面 聚沙成塔——每天進步一點點&#xff0c;大家好我是幾何心涼&#xff0c;不難發現越來越多的前端招聘JD中都加入了uni-app 這一項&#xff0c;它也已經成為前端開發者不可或缺的一項技能了&…

Rocket - tilelink - Atomics

https://mp.weixin.qq.com/s/TSwKL_qm-b-0e8x7r--hhg 簡單介紹Atomics中數學運算、邏輯運算的實現。??1. ioAtomics是一個硬件模塊&#xff0c;他繼承自Modules&#xff1a;??IO端口定義如下&#xff1a;??其中&#xff1a;a. write: 是否寫操作&#xff1b;b. a&#xf…

Spark streaming java代碼

待做轉載于:https://www.cnblogs.com/drjava/p/10464388.html

【第二趴】uni-app開發工具(手把手帶你安裝HBuilderX、搭建第一個多端項目初體驗)

文章目錄 寫在前面HBuilderXHBuilderX 優勢HBuilderX 安裝uni-app 初體驗寫在最后寫在前面 聚沙成塔——每天進步一點點,大家好我是幾何心涼,不難發現越來越多的前端招聘JD中都加入了uni-app 這一項,它也已經成為前端開發者不可或缺的一項技能了,所以涼哥為大家推出 聚沙成…