hdu 1542/1255 Atlantis/覆蓋的面積

1542

1255

兩道掃描線+線段樹的入門題。
基本沒有什么區別,前者是模板,后者因為是求覆蓋次數至少在兩次以上的,這個同樣是具有并集性質的,所以把cover的判斷條件更改一下就可以了qwq。

hdu1542 代碼如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 200010
using namespace std;
int n,c,cnt;
double y[MAXN];
struct Node{double x,l,r;int cover;bool flag;
}node[MAXN];
struct Line
{double x,y_up,y_down;int flag;
}line[MAXN];
inline bool cmp(struct Line x,struct Line y){return x.x<y.x;}
inline int ls(int x){return x<<1;}
inline int rs(int x){return x<<1|1;}
inline void build(int x,int l,int r)
{node[x].l=y[l],node[x].r=y[r],node[x].x=-1,node[x].flag=false,node[x].cover=0;if(l+1==r){node[x].flag=true; return;}int mid=(l+r)>>1;build(ls(x),l,mid);build(rs(x),mid,r);
}
inline double q_update(int x,double pos,double l,double r,int flag)
{if(l>=node[x].r||r<=node[x].l) return 0;if(node[x].flag){if(node[x].cover<=0) {node[x].x=pos;node[x].cover+=flag;return 0;}double pre=node[x].x;double ans=(pos-pre)*(node[x].r-node[x].l);node[x].x=pos;node[x].cover+=flag;return ans;}return q_update(ls(x),pos,l,r,flag)+q_update(rs(x),pos,l,r,flag);
}
int main()
{scanf("%d",&n);while(n!=0){double x1,x2,y1,y2;cnt=0;for(int i=1;i<=n;i++){scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);line[++cnt].x=x1,line[cnt].y_down=y1,line[cnt].y_up=y2,line[cnt].flag=1,y[cnt]=y1;line[++cnt].x=x2,line[cnt].y_down=y1,line[cnt].y_up=y2,line[cnt].flag=-1,y[cnt]=y2;}sort(&line[1],&line[cnt+1],cmp);sort(&y[1],&y[cnt+1]);build(1,1,cnt);double ans=0;for(int i=1;i<=cnt;i++)ans+=q_update(1,line[i].x,line[i].y_down,line[i].y_up,line[i].flag);printf("Test case #%d\nTotal explored area: %.2lf\n\n",++c,ans);scanf("%d",&n);}return 0;
}

hdu1255 代碼如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 200010
using namespace std;
int n,c,cnt,t;
double y[MAXN];
struct Node{double x,l,r;int cover;bool flag;
}node[MAXN];
struct Line
{double x,y_up,y_down;int flag;
}line[MAXN];
inline bool cmp(struct Line x,struct Line y){return x.x<y.x;}
inline int ls(int x){return x<<1;}
inline int rs(int x){return x<<1|1;}
inline void build(int x,int l,int r)
{node[x].l=y[l],node[x].r=y[r],node[x].x=-1,node[x].flag=false,node[x].cover=0;if(l+1==r){node[x].flag=true; return;}int mid=(l+r)>>1;build(ls(x),l,mid);build(rs(x),mid,r);
}
inline double q_update(int x,double pos,double l,double r,int flag)
{if(l>=node[x].r||r<=node[x].l) return 0;if(node[x].flag){if(node[x].cover<=1) {node[x].x=pos;node[x].cover+=flag;return 0;}double pre=node[x].x;double ans=(pos-pre)*(node[x].r-node[x].l);node[x].x=pos;node[x].cover+=flag;return ans;}return q_update(ls(x),pos,l,r,flag)+q_update(rs(x),pos,l,r,flag);
}
int main()
{scanf("%d",&t);while(t--){scanf("%d",&n);double x1,x2,y1,y2;cnt=0;for(int i=1;i<=n;i++){scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);line[++cnt].x=x1,line[cnt].y_down=y1,line[cnt].y_up=y2,line[cnt].flag=1,y[cnt]=y1;line[++cnt].x=x2,line[cnt].y_down=y1,line[cnt].y_up=y2,line[cnt].flag=-1,y[cnt]=y2;}sort(&line[1],&line[cnt+1],cmp);sort(&y[1],&y[cnt+1]);build(1,1,cnt);double ans=0;for(int i=1;i<=cnt;i++)ans+=q_update(1,line[i].x,line[i].y_down,line[i].y_up,line[i].flag);printf("%.2lf\n",ans);}return 0;
}

轉載于:https://www.cnblogs.com/fengxunling/p/10263273.html

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

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

相關文章

使用了JDK自帶的jconsole查看Tomcat運行情況

最近對公司的項目進行JVM調優&#xff0c;使用了JDK自帶的jconsole查看Tomcat運行情況&#xff0c;記錄下配置以便以后參考&#xff1a;首先&#xff0c;修改Tomcat的bin目錄下的catalina.bat文件&#xff0c;在JAVA_OPTS變量中添加下面四行&#xff0c;即可set JAVA_OPTS %JAV…

jvm02

java虛擬機內存管理 每個線程就是一個順序的執行單元&#xff0c;線程共享區即多個線程共享同一塊區域&#xff0c;線程獨占區即每個線程都有自己的虛擬機棧&#xff0c;本地方法棧&#xff0c;程序計數器。 程序計數器是一個比較小的內存空間&#xff0c;可以看作是當前線程所…

搭建svn管理平臺

安裝svn服務器&#xff1a;yum -y install subversion創建svn的目錄&#xff1a;mkdir -p /data/svn初始化svn目錄&#xff1a;svnadmin create /data/svnconf下的三個目錄介紹&#xff1a;authz&#xff1a;控制權限,創建用戶。密碼在passwd創建 passwd&#xff1a;密碼文件&…

Oracle dataguard 正常切換和應急切換

Oracle dataguard 正常切換和應急切換oracle dataguard提供異地容災方案,能有效的防止單點故障和提供高可用技術,這里介紹dataguard正常主備切換和應急切換&#xff08;應急切換模擬主庫出現問題無法還原,備庫脫離dataguard接管主庫對外提供服務&#xff09;1&#xff09;Oracl…

好程序員web前端分享JS引擎的執行機制

好程序員web前端分享JS引擎的執行機制&#xff0c;請先著重牢記兩點&#xff01;JS是單線程語言。JS的EventLoop是JS的執行機制。深入了解JS的執行&#xff0c;就等于深入了解JS里的eventloop。1、靈魂三問&#xff1a;JS為什么是單線程的?為什么需要異步?單線程又是如何實現…

shutil模塊、json和pickle模塊

shutil模塊&#xff1a; 高級的文件、文件夾、壓縮包處理模塊 json和pickle模塊 之前學過eval內置方法可以將一個字符串轉化成Python對象&#xff0c;但eval方法是有局限性的&#xff0c;對于普通的數據類型&#xff0c;json.loads、eval都可以使用&#xff0c;但遇到特殊類型的…

每日一問:LayoutParams 你知道多少?

前面的文章中著重講解了 View 的測量流程。其中我提到了一句非常重要的話&#xff1a;**View 的測量匡高是由父控件的 MeasureSpec 和 View 自身的 LayoutParams 共同決定的。**我們在前面的 每日一問&#xff1a;談談對 MeasureSpec 的理解 把 MeasureSpec 的重點進行了講解&a…

kuangbin專題十六 KMP擴展KMP HDU2594 Simpsons’ Hidden Talents

Homer: Marge, I just figured out a way to discover some of the talents we weren’t aware we had. Marge: Yeah, what is it? Homer: Take me for example. I want to find out if I have a talent in politics, OK? Marge: OK. Homer: So I take some politician’s na…

SNI: 實現多域名虛擬主機的SSL/TLS認證

為什么80%的碼農都做不了架構師&#xff1f;>>> 一. 介紹 早期的SSLv2根據經典的公鑰基礎設施PKI(Public Key Infrastructure)設計&#xff0c;它默認認為&#xff1a;一臺服務器&#xff08;或者說一個IP&#xff09;只會提供一個服務&#xff0c;所以在SSL握手時…

echo(),print(),print_r(),var_dump()的區別

echo可以一次輸出多個值&#xff0c;多個值之間用逗號分隔。echo是語言結構(language construct)&#xff0c;而并不是真正的函數&#xff0c;因此不能作為表達式的一部分使用。echo是php的內部指令&#xff0c;不是函數&#xff0c;無返回值。 print()&#xff1a;函數print()…

我心目中的牛程序員、我們可以對比看看(人家還是看多年朋友面子上才肯幫忙1周,至少需支付1萬元辛苦費)...

為什么80%的碼農都做不了架構師&#xff1f;>>> 最近碰到客戶整個網站改版的需要&#xff0c;非常短的時間里只有1周時間里&#xff0c;需要把整個B2C網站徹底的進行版面&#xff0c;我自己估算了一下&#xff0c;就是往死里干一天工作48個小時&#xff0c;1周也干…

c#做端口轉發程序支持正向連接和反向鏈接

3389的時候 例子1&#xff1a;連接a機器的3389端口連不上&#xff0c;因為對方防火墻或者網關做了限制&#xff0c;只能訪問a機器的個別端口比如80。 例子2&#xff1a;連接a機器的幾乎所有端口都連不上&#xff08;對方乃內網或者防火墻網關做了限制&#xff09;&#xff0c…

Spring Boot(十四):spring boot整合shiro-登錄認證和權限管理

Spring Boot(十四)&#xff1a;spring boot整合shiro-登錄認證和權限管理 使用Spring Boot集成Apache Shiro。安全應該是互聯網公司的一道生命線&#xff0c;幾乎任何的公司都會涉及到這方面的需求。在Java領域一般有Spring Security、Apache Shiro等安全框架&#xff0c;但是由…

通用權限管理系統組件 (GPM - General Permissions Manager) 不改數據庫、甚至不寫代碼就集成銅墻鐵壁權限管理組件...

為什么80%的碼農都做不了架構師&#xff1f;>>> 越成熟的東西&#xff0c;越牛X的東西&#xff0c;越簡單才對&#xff0c;簡單才是硬道理&#xff0c;蘋果的手機只有少數幾個按鍵&#xff0c;蘋果Ipad也很少的按鈕&#xff0c;甚至連蘋果的筆記本鍵盤都少一排&…

數學符號及讀法大全

數學符號及讀法大全 常用數學輸入符號&#xff1a; ≈ ≡ ≠ &#xff1d; ≤≥ &#xff1c; &#xff1e; ≮ ≯ ∷ &#xff0b; &#xff0d; &#xff0f; ∫ ∮ ∝ ∞ ∧ ∨ ∑ ∏ ∪ ∩ ∈ ∵ ∴ ⊥ ‖ ∠ ⌒ ≌ ∽ √ &#xff08;&#xff09; 【】&#xff5b…

在使用win 7 無線承載網絡時,啟動該服務時,有時會提示:組或資源的狀態不是執行請求操作的正確狀態。 網上有文章指出,解決這個問題的方法是在設備管理器中啟動“Microsoft托管網絡虛擬適配

在使用win 7 無線承載網絡時&#xff0c;啟動該服務時&#xff0c;有時會提示&#xff1a;組或資源的狀態不是執行請求操作的正確狀態。 網上有文章指出&#xff0c;解決這個問題的方法是在設備管理器中啟動“Microsoft托管網絡虛擬適配器”&#xff0c;見 http://jingyan.baid…

阿里一年,聊聊我成長了什么,入職阿里的職業生涯感悟

2018.5.31~2019.5.31&#xff0c;一段精彩的旅程&#xff0c;渡過了在阿里一年的時光&#xff0c;這段時光有快樂、有焦慮、有迷茫、更有思考&#xff0c;思考的是自己過去的種種不足、思考的是一些現在看來之前錯誤的想法、思考的是如何成為一個更好的技術人&#xff0c;將這一…

偏差-方差分解(轉)

1、定義 這里所說的偏差-方差分解就是一種解釋模型泛化性能的一種工具。它是對模型的期望泛化錯誤率進行拆解。 樣本可能出現噪聲&#xff0c;使得收集到的數據樣本中的有的類別與實際真實類別不相符。對測試樣本 x&#xff0c;另 yd 為 x 在數據集中的標記&#xff0c;y 為真實…

用過C#的朋友可能認為它是一種十分安全的語言,其實C#也可以做到經典的緩沖區溢出。 本文章將用一個實例來描述C#究竟是如何發生緩沖區溢出的! 首先建立一個C# Console工程,并開啟工程的“允許

用過C#的朋友可能認為它是一種十分安全的語言&#xff0c;其實C#也可以做到經典的緩沖區溢出。 本文章將用一個實例來描述C#究竟是如何發生緩沖區溢出的&#xff01; 首先建立一個C# Console工程&#xff0c;并開啟工程的“允許不安全代碼”選項 鍵入代碼&#xff1a; [csharp]…

COOKIE偽造登錄網站后臺

1.關于XSS&#xff08;跨站腳本攻擊&#xff09;和CSRF&#xff08;跨站請求偽造&#xff09;的知識&#xff0c;xss表示Cross Site Scripting(跨站腳本攻擊)&#xff0c;它與SQL注入攻擊類似&#xff0c;SQL注入攻擊中以SQL語句作為用戶輸入&#xff0c;從而達到查詢/修改/刪除…