1682. [HAOI2014]貼海報

来源:http://www.cnblogs.com/zwfymqz/archive/2017/05/27/6914161.html
-Advertisement-
Play Games

1682. [HAOI2014]貼海報 ★★☆ 輸入文件:ha14d.in 輸出文件:ha14d.out 簡單對比 時間限制:1 s 記憶體限制:256 MB 【題目描述】 Bytetown城市要進行市長競選,所有的選民可以暢所欲言地對競選市長的候選人發表言論。為了統一管理,城市委員會為選民準備了一個 ...


1682. [HAOI2014]貼海報

★★☆   輸入文件:ha14d.in   輸出文件:ha14d.out   簡單對比
時間限制:1 s   記憶體限制:256 MB

【題目描述】

Bytetown城市要進行市長競選,所有的選民可以暢所欲言地對競選市長的候選人發表言論。為了統一管理,城市委員會為選民準備了一個張貼海報的electoral牆。

張貼規則如下:

1.electoral牆是一個長度為N個單位的長方形,每個單位記為一個格子;

2.所有張貼的海報的高度必須與electoral牆的高度一致的;

3.每張海報以“A B”表示,即從第A個格子到第B個格子張貼海報;

4.後貼的海報可以覆蓋前面已貼的海報或部分海報。

現在請你判斷,張貼完所有海報後,在electoral牆上還可以看見多少張海報。

【輸入格式】

第一行:     N   M            分別表示electoral牆的長度和海報個數

接下來M行:   Ai   Bi          表示每張海報張貼的位置


【輸出格式】

輸出貼完所有海報後,在electoral牆上還可以看見的海報數。

【樣例輸入】


100 5

1 4

2 6

8 10

3 4

7 10


【樣例輸出】

4

【提示】


 

【約束條件】

1 0<= N <= 10000000     1<=M<=1000   1<= Ai <= Bi <=10000000

所有的數據都是整數。數據之間有一個空格

上來看了一眼立馬用10min打出了暴力,打完T3的暴力之後回來看了一下這個題感覺是線段樹的裸體

然後用15min寫出了線段樹

但是!!!

線段樹!!

居然!!

比!!

暴力!!

慢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

而且!!

還!!

爆記憶體!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

這就比較尷尬了,望著對拍程式上每次都是暴力先跑完然後線段樹等一秒再出結果的場景,我還能說什麼、、

難道是因為我寫的線段樹太醜了???

=.=

暴力思路:模擬張貼每一個海報

複製代碼
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 const int MAXN=10000001;
 7 int n,m,x,y;
 8 int read(int & n)
 9 {
10     char c='/';int x=0,flag=0;
11     while(c<'0'||c>'9')
12     {c=getchar();
13     if(c=='-')flag=1;}
14     while(c>='0'&&c<='9')
15     {x=x*10+c-48;c=getchar();}
16     if(flag)n=-x;
17     else n=x;
18     return n;
19 }
20 int a[MAXN];
21 int vis[MAXN];
22 int now=1;
23 int ans=0;
24 int main()
25 {
26     freopen("a.in","r",stdin);
27     freopen("b.out","w",stdout);
28     read(n);read(m);
29     for(int i=1;i<=m;i++)
30     {
31         read(x);read(y);
32         if(x>y)swap(x,y);
33         for(int j=x;j<=y;j++)
34         a[j]=i;
35     }
36     for(int i=1;i<=n;i++)
37     {
38         if(vis[a[i]]==0&&a[i]!=0)
39         {
40             ans++;
41             vis[a[i]]=1;
42         }
43     }
44     printf("%d",ans);
45     return 0;
46 }
複製代碼

正解:老師講了個掃描線但是沒聽懂啊,,,,,so參考了題解的浮水法

首先我們讀入每一個海報的l和r,

然後逆序掃描,預設ans為一,因為最後的一張一定能看見

對於每一個i一直向上枚舉,就像浮水一樣,如果經過不斷的裁剪之後能夠>n的話

ans++

複製代碼
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 const int MAXN=1001;
 8 int n,m,ans=1;
 9 int vis[MAXN];
10 struct node
11 {
12     int l;
13     int r;
14     int id;
15 }a[MAXN];
16 int read(int & n)
17 {
18     char c='/';int flag=0,x=0;
19     while(c<'0'||c>'9')
20     {if(c=='-')flag=1;
21     c=getchar();}
22     while(c>='0'&&c<='9')
23     {x=x*10+(c-48);
24     c=getchar();}
25     if(flag)n=-x;
26     else n=x;
27 }
28 void water(int ll,int rr,int now,int pos)
29 {
30     if(vis[pos])
31         return ;
32     while(now<=m&&(rr<=a[now].l||ll>=a[now].r))
33     now++;
34     if(now>m)
35     {
36         vis[pos]=1;
37         ans++;
38         return ;
39     }
40     if(ll<a[now].l&&rr>a[now].l)
41         water(ll,a[now].l,now+1,pos);
42     if(rr>a[now].r&&ll<a[now].r)
43         water(a[now].r,rr,now+1,pos);
44     
45 }
46 int main()
47 {
48     freopen("ha14d.in","r",stdin);
49     freopen("ha14d.out","w",stdout);
50     read(n);read(m);
51     for(int i=1;i<=m;i++)
52     {
53         read(a[i].l);
54         read(a[i].r);
55         a[i].r=a[i].r+1;
56         a[i].id=i;
57     }
58     for(int i=m-1;i>=1;i--)
59     {
60         water(a[i].l,a[i].r,i+1,i);
61     }
62     printf("%d",ans);
63     return 0;
64 }
複製代碼
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 轉載請出自出處:http://www.cnblogs.com/hd3013779515/ 一、基本概念 1、redis集群是一個可以在多個節點之間進行數據共用的設施。redis集群提供了以下兩個好處1.1 將數據自動切分(split)到多個節點1.2 當集群中的某一個節點故障時,redis還可以繼續 ...
  • 遞推演算法 一、遞推演算法簡介 一般是兩步: 1、根據題目條件推出遞推公式 2、根據遞推公式編寫代碼求解(一般可以寫成普通迴圈和遞歸) 二、實例 2.1 斐波拉契數列 斐波拉契數列,1 1 2 3 5 8 13 21 34......,寫出第n項。 (1)遞推公式 f(n)=f(n-1)+f(n-2) ...
  • C++函數 一、函數簡介 函數就是方法,就是為了實現具體功能的一段代碼 二、函數結構 返回值類型 函數名(參數列表){ 函數體 } //求和函數 int sum(int a,int b){ return a+b;} 忘記函數結構怎麼寫的時候,就去想main函數結構,main函數總會寫吧 int ma ...
  • C++模板 C++信息學競賽編程模板 ...
  • 題目 synchronized怎麼實現線程同步?請修改《每天一道Java題[10]》中的MyRunnableThread類以解決三個線程都獲取到10的問題。 解答 方法一: 採用synchronized關鍵字包裹需要保證線程安全的代碼塊,來實現線程同步。語法格式為: 《每天一道Java題[10]》中 ...
  • 1.什麼是適配器模式? 適配器模式是一種過渡模式,用於溝通兩個不相容的事物,實現信息交換。 2.適配器模式的目的 使一個對象能夠以一種相對簡單的方式處理多個不同類型的對象,即一個對象相容多個不同類型的對象。例如,電腦接收外部硬體的插口唯一確定,不同尺寸的記憶體卡先插到讀卡器上,再由讀卡器插到唯一確定的 ...
  • 題目描述 在一個園形操場的四周擺放N堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。 試設計出1個演算法,計算出將N堆石子合併成1堆的最小得分和最大得分. 輸入輸出格式 輸入格式: 數據的第1行試正整數N,1≤N≤100,表示有N ...
  • 轉載請出自出處:http://www.cnblogs.com/hd3013779515/ 1.Redis安裝 使用的最新版本為 3.2.9,下載並安裝: 執行make後報錯 從錯誤看原因是缺少gcc,執行yum install gcc。之後再次執行make,還是報錯。 執行make distclea ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...